adminysh

[数据库] Delphi中将DBGridEH导出到Excel中(可导出复表头)

#1楼
发帖时间:2013-2-22   |   查看数:0   |   回复数:2
admin
dbgrid 输出到 excel

uses comobj

procedure DBGridInFoToExcel(FileName, TitleCaption: string;
 MakeDataSource: TDataSource; makeDBGrid: TDBGrid);
var
 xlApp, xlSheet, szValue: Variant;
 ARow, iLoop: word;
begin
 xlApp := CreateOleObject('Excel.Application');
 try
   xlSheet := CreateOleObject('Excel.Sheet');
   xlSheet := xlApp.WorkBooks.Add;
//   表格标题  
   for iLoop := 0 to makeDBGrid.Columns.Count - 1 do
     xlSheet.WorkSheets[1].Cells[1, iLoop + 1] := makeDBGrid.Columns[iLoop].Title.Caption;
    // 数据
   ARow := 2;
   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;
         if Length(szvalue)=18 then szValue:=''''+szvalue; //身份证号输出加单引号
         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
   Application.MessageBox('本机没有安装Excel.', '错误', MB_OK);
 end;
end;
2015-11-18 #2楼
admin
uses DBGridEhImpExp;
{-------------------------------------------------------------------------------
 过程名:    TfrmEmplyExport.OutToFile
 作者:      han
 日期:      2007.08.08
 参数:      IADO : TADOQuery; DgEh : TDBGridEh
 返回值:    无
 说明:      导出查询结果到文件
-------------------------------------------------------------------------------}
procedure TfrmEmplyExport.OutToFile(IADO : TADOQuery; DgEh : TDBGridEh);
var
 ExpClass:TDBGridEhExportclass;
 Ext:String;
 FSaveDialog: TSaveDialog;
begin
 try
   if not IADO.IsEmpty then
   begin
     FSaveDialog := TSaveDialog.Create(Self);
     FSaveDialog.Filter:='Excel 文档 (*.xls)|*.XLS|Text files (*.txt)|*.TXT|Comma separated values (*.csv)|*.CSV|HTML file (*.htm)|*.HTM|Word 文档 (*.rtf)|*.RTF';
     if FSaveDialog.Execute and (trim(FSaveDialog.FileName)<>'') then
     begin
       case FSaveDialog.FilterIndex of
           1: begin ExpClass := TDBGridEhExportAsXLS; Ext := 'xls'; end;
           2: begin ExpClass := TDBGridEhExportAsText; Ext := 'txt'; end;
           3: begin ExpClass := TDBGridEhExportAsCSV; Ext := 'csv'; end;
           4: begin ExpClass := TDBGridEhExportAsHTML; Ext := 'htm'; end;
           5: begin ExpClass := TDBGridEhExportAsRTF; Ext := 'rtf'; end;
       end;
       if ExpClass <> nil then
       begin
         if UpperCase(Copy(FSaveDialog.FileName,Length(FSaveDialog.FileName)-2,3)) <> UpperCase(Ext) then
           FSaveDialog.FileName := FSaveDialog.FileName + '.' + Ext;
           if FileExists(FSaveDialog.FileName) then
           begin
             if application.MessageBox('文件名已存在,是否覆盖   ', '提示', MB_ICONASTERISK or MB_OKCANCEL)<>idok then
               exit;
           end;
          Screen.Cursor := crHourGlass;
          SaveDBGridEhToExportFile(ExpClass,DgEh,FSaveDialog.FileName,true);
          Screen.Cursor := crDefault;
          MessageBox(Handle, '导出成功  ', '提示', MB_OK +
            MB_ICONINFORMATION);
         end;
     end;
     FSaveDialog.Destroy;
   end;
 except
   on e: exception do
   begin
     Application.MessageBox(PChar(e.message), '错误', MB_OK + MB_ICONSTOP);
   end;
 end;                      
end;
1月前 #3楼
游客组