DBGRID中显示的数据怎么导入到EXCEL表中,再另外加上表头。请教高手。
还有,我在笔记本上编的,分辨率是1024*768 到一般800*600的商用机器上时候,
显示不合适,什么方法可以简单解决。谢谢了!

解决方案 »

  1.   

    DBGRID中显示的数据导入到EXCEL表:var
      i, j: Integer;
      MyExcel, MySheet: Variant;
    begin
      try
        MyExcel := CreateOleObject('Excel.Application');
        MyExcel.Visible := True;
        MyExcel.WorkBooks.Add;           
        MyExcel.WorkSheets[1].Activate;  
        MyExcel.WorkBooks[1].WorkSheets[1].Name := Title;
        MySheet := MyExcel.WorkBooks[1].WorkSheets[1];
        for i := 0 to Str.RowCount - 1 do
          for j := 0 to Str.ColCount - 1 do
          begin
            MySheet.Cells[i + 1,j + 1] := Str.Cells[j,i];
          end;
    end;分辨率转换的问题好像有点复杂。
      

  2.   

    上面的函数加上这个做第一行:procedure ReportToExcel(Str:TStringGrid;Title:String);
      

  3.   

    你得用取其DataSet数据用循环一条一条写进去太慢;推荐用DBGridEh,其有SaveDBGridEhToExportFile方法,一下子就可以导出去且支持多种形式
      

  4.   

    procedure TfrmEhlib.Button1Click(Sender: TObject);
      procedure DBGridInFoToExcel(FileName, TitleCaption: string;
        MakeDataSource: TDataSource; makeDBGridEh: TDBGrid);
      var
           xlApp, xlSheet, szValue: Variant;
           ARow, iLoop: word;
      begin
           xlApp := CreateOleObject('Excel.Application');
           try
               xlSheet := CreateOleObject('Excel.Sheet');
               xlSheet := xlApp.WorkBooks.Add;            xlSheet.WorkSheets[1].Cells[1,1] := TitleCaption;
               for iLoop := 0 to makeDBGridEh.Columns.Count - 1 do
                    xlSheet.WorkSheets[1].Cells[2, iLoop+1] := makeDBGridEh.Columns[iLoop].Title.Caption;           // 数据
               ARow := 3;
               with MakeDataSource.DataSet do
               begin
                    DisableControls;
                    First;
                    while not Eof do
                    begin
                         for iLoop := 0 to Fields.Count - 1 do
                         begin
                             szValue := Fields[iLoop].Value;
                             xlSheet.WorkSheets[1].Cells[ARow, iLoop+1] := szValue;
                         end;
                         Inc(ARow);
                         Next;
                    end;
                    First;
                    EnableControls;
               end;           try
                    xlSheet.SaveAs(FileName);
                    Application.MessageBox('导出完毕!', '提示', MB_IconExclamation);
               finally
                    xlSheet.Close;
                    xlApp.Quit;
                    xlApp := UnAssigned;
               end;
           except
                MessageBox(handle, '本机没有安装Excel.', '提示',MB_IconExclamation);
           end;
      end;
    begin
      DBGridInFoToExcel('d:\test.xls', 'test xls', dsStore, dgStore)
    end;
      

  5.   

    你得用取其DataSet数据用循环一条一条写进去太慢;推荐用DBGridEh,其有SaveDBGridEhToExportFile方法,一下子就可以导出去且支持多种形式
      
    能不能再讲的详细一点,最好有个例子什么的,谢谢
      

  6.   

    谢谢秋风.太好了,我整理了一下可以用.加分给他吧.procedure TForm1.Button1Click(Sender: TObject);
      procedure DBGridInFoToExcel(FileName, TitleCaption: string;
        DataSource1: TDataSource; DBGridEh1: TDBGrideh);
      var
           xlApp, xlSheet, szValue: Variant;
           ARow, iLoop: word;
      begin
           xlApp := CreateOleObject( 'Excel.Application' );;
           try
               xlSheet := CreateOleObject('Excel.Sheet');
               xlSheet := xlApp.WorkBooks.Add;            xlSheet.WorkSheets[1].Cells[1,1] := TitleCaption;
               for iLoop := 0 to DBGridEh1.Columns.Count - 1 do
                    xlSheet.WorkSheets[1].Cells[2, iLoop+1] := DBGridEh1.Columns[iLoop].Title.Caption;           // 数据
               ARow := 3;
               with DataSource1.DataSet do
               begin
                    DisableControls;
                    First;
                    while not Eof do
                    begin
                         for iLoop := 0 to Fields.Count - 1 do
                         begin
                             szValue := Fields[iLoop].Value;
                             xlSheet.WorkSheets[1].Cells[ARow, iLoop+1] := szValue;
                         end;
                         Inc(ARow);
                         Next;
                    end;
                    First;
                    EnableControls;
               end;           try
                    xlSheet.SaveAs(FileName);
                    Application.MessageBox('导出完毕!', '提示', MB_IconExclamation);
               finally
                    xlSheet.Close;
                    xlApp.Quit;
                    xlApp := UnAssigned;
               end;
           except
                MessageBox(handle, '本机没有安装Excel.', '提示',MB_IconExclamation);
           end;
      end;
    begin
      DBGridInFoToExcel('d:\test.xls', 'test xls', DataSource1, DBGridEh1);
    end;
      

  7.   

    根本不用OLEObject这么麻烦!可以把Excel文件当成一个数据库,而Excel文件中的每一个工作表则是库中的一个Table。
      

  8.   

    借着前面楼主的问题再问一个,微软的Jet数据驱动引擎应该是可以支持excel表格存取的,不过为什么我做不了,哪位清楚给个解释