问题如题
现在的问题是导出的数据格式有问题,譬如特别长的编号20080405173323显示是2.00804E+13
还有就是列的宽度我希望是和在DBGrid里的一致最好是导出来的和在DBGrid里的排版都要一样,不知道怎么弄
下面是导出到Excel的方法
function ExportDBGrid(DBGrid: TDBGrid; SheetName: string): boolean;
var
  c, r, i, j: integer;
  app: Olevariant;
  TempFileName, ResultFileName: string;
begin
  try
    result := True;
      app := CreateOLEObject('Excel.application');
    //  app.WorkBooks.Add(xlWBatWorkSheet);    
    except
      Application.MessageBox('Excel没有正确安装!','警告',MB_OK);
      result := False;
      exit;
    end;
      TempFileName := SheetName;
    app.Workbooks.add;
    app.Visible := false;
    Screen.Cursor := crHourGlass;
    DBGrid.DataSource.DataSet.First;
    c := DBGrid.Columns.Count;
    r := DBGrid.DataSource.DataSet.RecordCount;
    Application.ProcessMessages;
    for i := 0 to c - 1 do
    begin
      app.cells(1, 1 + i) := DBGrid.Columns[i].Title.Caption;
    end;
    for j := 1 to r do
    begin
      for i := 0 to c - 1 do
        app.cells(j + 1, 1 + i) := DBGrid.DataSource.DataSet.Fields[i].AsString;
      DBGrid.DataSource.DataSet.Next;
    end;
    ResultFileName := TempFileName;
    if ResultFileName = '' then
      ResultFileName := '数据导出';
    if FileExists(TempFileName) then
    DeleteFile(PCHar(TempFileName));
    app.Activeworkbook.saveas(TempFileName);
    app.Activeworkbook.close(false);
    app.quit;
    app := unassigned;
end;

解决方案 »

  1.   

       先制作相应的Excel模版,然后向其中填充数据即可。
       详细:打开Excel,根据所要求的设计表格的各种格式,“譬如特别长的编号20080405173323显示是2.00804E+13 ”这个问题可以通过将特定的列、单元格 显示属性设置为文本来解决,然后将当前Excel文档保存成模版放在程序目录下或者自定义的位置,最后在Delphi中需要导出数据时,根据该Excel模版来生成一个新的自定义表格,并且填充即可,特长编号的问题就解决了。   实际上需要进行表格的数据导出时,格式的设定是很麻烦的事情,主线思想是,Delphi只负责数据的导出(填充),最好不要在Delphi中进行Excel格式的设定,这样需要加入更多的VBA代码,格式的设定可以通过设计相应的Excel模版来解决,每次根据模版声称新的Excel文件,然后Delphi填充。
      

  2.   

    遇到复杂报表格式的时候,我就是用这个办法解决的,包括Excel模版中还可以使用单元格函数等,很方便的。
      

  3.   


    app.Workbooks.add; {下面加多一句控制EXCEL要写编号数据的列的格式为文本以下以B列为例}
    app.Columns.Range_['B1','B65536'].NumberFormatLocal := '@'; // 文体格式