我的方法是这样的
procedure ExportToExcelForGroup(Sender1: Tobject;s_Title,s_Info: string);
var
MsExcel, MsExcelWorkBook, MsExcelWorkSheet: Variant;
i, j, K: Integer;
adv: TForm;
lab: TProgressBar;
s_RecordGroupOld,s_RecordGroupNew: string;
begin
if (Sender1 as TCustomADODataSet).Active then
begin
try
MsExcel := CreateOleObject('Excel.Application');
MsExcelWorkBook := MsExcel.WorkBooks.Add(xlWBATWorksheet);
MsExcelWorkBook.Title := 'asdfasdfsd';
MsExcelWorkSheet := MsExcel.WorkSheets[1];
//MsExcel.Visible := True;
with (Sender1 as TCustomADODataSet) do
begin //读取Grid Display Label 放入Execl
for j := 0 to FieldCount - 3 do //length(Fields[j].DisplayLabel)
MsExcelWorkSheet.Range[Chr(65+j)+'3'].Value:=Fields[j+1].DisplayLabel;
first;
/////////////////
adv:=TForm.Create(nil);
lab:=TProgressBar.Create(nil);
try
//动态显示进度窗口
adv.Name:='AdvForm';
Adv.Position:=poScreenCenter;
adv.BorderStyle:=bsDialog;
adv.FormStyle:=fsStayOnTop;
adv.Height:=120;
adv.Width:=320;
adv.caption:='处理进度';
adv.Visible:=true; lab.Parent:=adv;
lab.Top:=adv.Height div 2-20;
lab.Left:=12;
lab.Width:=adv.Width-30;
lab.Visible:=true;
lab.Max:=100;
lab.min:=0;
lab.Position:=0;
/////////////////
i := 4;
s_RecordGroupOld := TCustomADODataSet(Sender1).Fields[0].AsString;
MsExcelWorkSheet.Range[Chr(65+j)+'3'].Value:=s_RecordGroupOld;
while not eof do
begin //读取Grid Data Label 放入Execl
s_RecordGroupNew := TCustomADODataSet(Sender1).Fields[0].AsString;
if s_RecordGroupOld <> s_RecordGroupNew then
begin
inc(j);
MsExcelWorkSheet.Range[Chr(65+j)+'3'].Value:=s_RecordGroupNew;
s_RecordGroupOld := s_RecordGroupNew;
i:=4;
end;
for K := 0 to FieldCount - 3 do //length(Fields[j].AsString)
MsExcelWorkSheet.Range[Chr(65+K)+IntToStr(i)].Value:=Fields[K+1].AsString;
MsExcelWorkSheet.Range[Chr(65+j)+IntToStr(i)].Value:=Fields[K+1].AsString;
Inc(i);
lab.position:=Longint(Trunc( ((recno+1) * 100) / (RecordCount) ));
Application.ProcessMessages;
Next;
end;
//合并单元格
MsExcelWorkSheet.Range['a1',chr(65+j)+'1'].HorizontalAlignment := xlCenter;
MsExcelWorkSheet.Range['a2',chr(65+j)+'2'].HorizontalAlignment := xlCenter;
MsExcelWorkSheet.Range['a1',chr(65+j)+'1'].VerticalAlignment := xlBottom;
MsExcelWorkSheet.Range['a2',chr(65+j)+'2'].VerticalAlignment := xlCenter;
MsExcelWorkSheet.Range['a1',chr(65+j)+'2'].WrapText := False;
MsExcelWorkSheet.Range['a1',chr(65+j)+'2'].Orientation := 0;
MsExcelWorkSheet.Range['a1',chr(65+j)+'2'].AddIndent := False;
MsExcelWorkSheet.Range['a1',chr(65+j)+'2'].ShrinkToFit := False;
MsExcelWorkSheet.Range['a1',chr(65+j)+'2'].MergeCells := False;
MsExcelWorkSheet.Range['a1',chr(65+j)+'2'].Merge(true);
MsExcelWorkSheet.Range['a1'].Value := s_Title;
MsExcelWorkSheet.Range['a2'].Value := s_Info;
first;
FINALLY
lab.Free;
adv.free;
end;
end;
finally
MsExcel.Visible := True;
end;
end;
end;
procedure ExportToExcelForGroup(Sender1: Tobject;s_Title,s_Info: string);
var
MsExcel, MsExcelWorkBook, MsExcelWorkSheet: Variant;
i, j, K: Integer;
adv: TForm;
lab: TProgressBar;
s_RecordGroupOld,s_RecordGroupNew: string;
begin
if (Sender1 as TCustomADODataSet).Active then
begin
try
MsExcel := CreateOleObject('Excel.Application');
MsExcelWorkBook := MsExcel.WorkBooks.Add(xlWBATWorksheet);
MsExcelWorkBook.Title := 'asdfasdfsd';
MsExcelWorkSheet := MsExcel.WorkSheets[1];
//MsExcel.Visible := True;
with (Sender1 as TCustomADODataSet) do
begin //读取Grid Display Label 放入Execl
for j := 0 to FieldCount - 3 do //length(Fields[j].DisplayLabel)
MsExcelWorkSheet.Range[Chr(65+j)+'3'].Value:=Fields[j+1].DisplayLabel;
first;
/////////////////
adv:=TForm.Create(nil);
lab:=TProgressBar.Create(nil);
try
//动态显示进度窗口
adv.Name:='AdvForm';
Adv.Position:=poScreenCenter;
adv.BorderStyle:=bsDialog;
adv.FormStyle:=fsStayOnTop;
adv.Height:=120;
adv.Width:=320;
adv.caption:='处理进度';
adv.Visible:=true; lab.Parent:=adv;
lab.Top:=adv.Height div 2-20;
lab.Left:=12;
lab.Width:=adv.Width-30;
lab.Visible:=true;
lab.Max:=100;
lab.min:=0;
lab.Position:=0;
/////////////////
i := 4;
s_RecordGroupOld := TCustomADODataSet(Sender1).Fields[0].AsString;
MsExcelWorkSheet.Range[Chr(65+j)+'3'].Value:=s_RecordGroupOld;
while not eof do
begin //读取Grid Data Label 放入Execl
s_RecordGroupNew := TCustomADODataSet(Sender1).Fields[0].AsString;
if s_RecordGroupOld <> s_RecordGroupNew then
begin
inc(j);
MsExcelWorkSheet.Range[Chr(65+j)+'3'].Value:=s_RecordGroupNew;
s_RecordGroupOld := s_RecordGroupNew;
i:=4;
end;
for K := 0 to FieldCount - 3 do //length(Fields[j].AsString)
MsExcelWorkSheet.Range[Chr(65+K)+IntToStr(i)].Value:=Fields[K+1].AsString;
MsExcelWorkSheet.Range[Chr(65+j)+IntToStr(i)].Value:=Fields[K+1].AsString;
Inc(i);
lab.position:=Longint(Trunc( ((recno+1) * 100) / (RecordCount) ));
Application.ProcessMessages;
Next;
end;
//合并单元格
MsExcelWorkSheet.Range['a1',chr(65+j)+'1'].HorizontalAlignment := xlCenter;
MsExcelWorkSheet.Range['a2',chr(65+j)+'2'].HorizontalAlignment := xlCenter;
MsExcelWorkSheet.Range['a1',chr(65+j)+'1'].VerticalAlignment := xlBottom;
MsExcelWorkSheet.Range['a2',chr(65+j)+'2'].VerticalAlignment := xlCenter;
MsExcelWorkSheet.Range['a1',chr(65+j)+'2'].WrapText := False;
MsExcelWorkSheet.Range['a1',chr(65+j)+'2'].Orientation := 0;
MsExcelWorkSheet.Range['a1',chr(65+j)+'2'].AddIndent := False;
MsExcelWorkSheet.Range['a1',chr(65+j)+'2'].ShrinkToFit := False;
MsExcelWorkSheet.Range['a1',chr(65+j)+'2'].MergeCells := False;
MsExcelWorkSheet.Range['a1',chr(65+j)+'2'].Merge(true);
MsExcelWorkSheet.Range['a1'].Value := s_Title;
MsExcelWorkSheet.Range['a2'].Value := s_Info;
first;
FINALLY
lab.Free;
adv.free;
end;
end;
finally
MsExcel.Visible := True;
end;
end;
end;
解决方案 »
- 查询结果在类型不兼容问题
- 如何用变量设置顺序排序或倒序排序?
- sqlserver2000发邮件遇到的问题
- 如何提取不存在于表中的数据?
- 关于exec执行出错的问题
- 这句话的日期部分该怎么表达:rs.open("select * from info where flag>=1 and sortid is not null and dateandtime=""&date&"""),conn,
- 一个插入表的问题~~~
- 根据结果集如何删除记录?
- 关于Sql server中数据设备与数据库的建立,先谢了!!!分不够的话还加!
- 這個sql語句應該怎樣寫?
- 请问如何写一条修改语句,将原来有值的字段修改为NULL.
- 从SQLSERVER查询物品库存一到276种速度就慢得不能忍受,不知是何原因???
declare @col intset @col=2 --列号
--转换处理
select case when @col>26 then char(64+(@col-1)/26) else '' end
+char(65+(@col-1)%26)set @col=28 --列号
--转换处理
select case when @col>26 then char(64+(@col-1)/26) else '' end
+char(65+(@col-1)%26)