我试了将一个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;

解决方案 »

  1.   

    主要是对workbooks和worksheets 的概念以及用法很不清楚,有人知道吗?^_^
      

  2.   

    我没测试,给你点思路,关键是如何激活第二个工作表,应该是这样:// Specifying name of worksheet:
       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,导出数据其他类推。祝你好运!
      

  3.   

    Sheet[0] := XLApp.WorkBooks[1].WorkSheets['sheet1'];
    Sheet[0].Name := '内部入库';
    Sheet[1] := XLApp.WorkBooks[1].WorkSheets.add;
    Sheet[1].Name := '入库2;
    ..........
      

  4.   

    3x !!
    我试了后面的方法是对的
    goldstar365(星光宝盒) 说得也很有道理 :-)
    先结贴
    不过对于这句话
    XLApp.WorkBooks.Add(-4167); //????????这个是什么意思
    不理解?