我试了将一个stringgrid表转换为excel表(1个sheets)是ok的,然后在那个程序的基础上我又想将2个stringgrid转换为excel表(2个sheets)
//导出当天交易记录(5张sheets)
procedure TMain.SGToExcelFile(SG1,SG2: TStringGrid);
var
XLApp: Variant;
Sheet: array[0..1] of Variant;
I, J: Integer;
SaveDialog:TSaveDialog;
StrSaveFile:string;
begin
SaveDialog:=TSaveDialog.Create(Nil);
SaveDialog.Filter := '*.xls';
SaveDialog.Execute;
StrSaveFile:=SaveDialog.FileName;
if length(StrSaveFile)=0 then exit;
try
screen.Cursor:=crHourGlass;
begin
try
XLApp := CreateOleObject('Excel.Application');
XLApp.WorkBooks.Add(-4167); //????????这个是什么意思
XLApp.WorkBooks[1].WorkSheets[1].Name := '内部入库';
Sheet[0] := XLApp.WorkSheets['内部入库'];
//??????????如何添加sheet[1]??????
J := 0;
except
MessageBox(GetActiveWindow,'无法调用Mircorsoft Excel! '+chr(13)+chr(10)+
'请检查是否安装了Mircorsoft Excel。','提示',MB_OK+MB_ICONINFORMATION);
Exit;
end; // sg1 to excel sheet1
for I:=0 to SG1.ColCount-1 do Sheet[0].Cells[J+1,I+1] := SG1.cells[I,0];
Inc(J);
while J<SG1.RowCount do begin
for I:=0 to SG1.ColCount-1 do Sheet[0].Cells[J+1,I+1] := trim(SG1.cells[I,J]);
Inc(J);
Next;
end; {// sg2 to excel sheet2
J := 0 ;
for I:=0 to SG2.ColCount-1 do Sheet[1].Cells[J+1,I+1] := SG2.cells[I,0];
Inc(J);
while J<SG2.RowCount do begin
for I:=0 to SG2.ColCount-1 do Sheet[1].Cells[J+1,I+1] := trim(SG2.cells[I,J]);
Inc(J);
Next;
end;}
XLApp.activeworkbook.saveas(StrSaveFile);
Application.ProcessMessages;
XLApp.Application.Quit;
showmessage('导出成功!');
end;
Finally
SaveDialog.Free;
screen.Cursor:=crDefault;
end;
end;
//导出当天交易记录(5张sheets)
procedure TMain.SGToExcelFile(SG1,SG2: TStringGrid);
var
XLApp: Variant;
Sheet: array[0..1] of Variant;
I, J: Integer;
SaveDialog:TSaveDialog;
StrSaveFile:string;
begin
SaveDialog:=TSaveDialog.Create(Nil);
SaveDialog.Filter := '*.xls';
SaveDialog.Execute;
StrSaveFile:=SaveDialog.FileName;
if length(StrSaveFile)=0 then exit;
try
screen.Cursor:=crHourGlass;
begin
try
XLApp := CreateOleObject('Excel.Application');
XLApp.WorkBooks.Add(-4167); //????????这个是什么意思
XLApp.WorkBooks[1].WorkSheets[1].Name := '内部入库';
Sheet[0] := XLApp.WorkSheets['内部入库'];
//??????????如何添加sheet[1]??????
J := 0;
except
MessageBox(GetActiveWindow,'无法调用Mircorsoft Excel! '+chr(13)+chr(10)+
'请检查是否安装了Mircorsoft Excel。','提示',MB_OK+MB_ICONINFORMATION);
Exit;
end; // sg1 to excel sheet1
for I:=0 to SG1.ColCount-1 do Sheet[0].Cells[J+1,I+1] := SG1.cells[I,0];
Inc(J);
while J<SG1.RowCount do begin
for I:=0 to SG1.ColCount-1 do Sheet[0].Cells[J+1,I+1] := trim(SG1.cells[I,J]);
Inc(J);
Next;
end; {// sg2 to excel sheet2
J := 0 ;
for I:=0 to SG2.ColCount-1 do Sheet[1].Cells[J+1,I+1] := SG2.cells[I,0];
Inc(J);
while J<SG2.RowCount do begin
for I:=0 to SG2.ColCount-1 do Sheet[1].Cells[J+1,I+1] := trim(SG2.cells[I,J]);
Inc(J);
Next;
end;}
XLApp.activeworkbook.saveas(StrSaveFile);
Application.ProcessMessages;
XLApp.Application.Quit;
showmessage('导出成功!');
end;
Finally
SaveDialog.Free;
screen.Cursor:=crDefault;
end;
end;
解决方案 »
- 【高分】 基础没打好,问个记录排序的问题
- INI问题.
- ■■■ 关于写 ini文件里奇怪的问题????
- 难度较高的函数
- 如何使用Delphi实现对“服务”的重新启动(象Officescan,SQL Server的服务)
- 在DBLookupComboBox5组件中,items变成一个表中的某一个字段的所有数据,且还可以手工输入新的数据??
- ClientSocket采用阻塞方式发送数据的问题,请教各位大虾!
- 请教高手,使用第三方窗体控件如何编写消息处理?
- 请教有关web service详细介绍的文章在哪有?
- DELPHI 中包的问题,急!急!急!
- 一个ActiveForm有没有办法调用另一个ActiveForm,进者有分。
- xinshiji(无名),进来!!!!
Sheets1 := XLApp.Workbooks[1].Worksheets[1]; 第一个表
XLApp.WorkBooks[1].WorkSheets[1].Name := '内部入库';//第一个表
XLApp.WorkBooks[1].WorkSheets[2].Name := '入库2'; //第二个表
// Selecting our worksheet:
Sheets.Item['内部入库'].Activate;
激活内部入库,导出数据
Sheets.Item['入库2'].Activate;
激活入库2,导出数据其他类推。祝你好运!
Sheet[0].Name := '内部入库';
Sheet[1] := XLApp.WorkBooks[1].WorkSheets.add;
Sheet[1].Name := '入库2;
..........
我试了后面的方法是对的
goldstar365(星光宝盒) 说得也很有道理 :-)
先结贴
不过对于这句话
XLApp.WorkBooks.Add(-4167); //????????这个是什么意思
不理解?