当前位置:文档之家› delphi导出数据至Excel的几种方法及比较

delphi导出数据至Excel的几种方法及比较

delphi导出数据至Excel的几种方法及比较一、delphi 快速导出exceluses ComObj,clipbrd;function ToExcel(sfilename:string; ADOQuery:TADOQuery):boolean;constxlNormal=-4143;vary : integer;tsList : TStringList;s,filename :string;aSheet :V ariant;excel :OleV ariant;savedialog :tsavedialog;beginResult := true;tryexcel:=CreateOleObject('Excel.Application');excel.workbooks.add;except//screen.cursor:=crDefault;showmessage('无法调用Excel!');exit;end;savedialog:=tsavedialog.Create(nil);savedialog.FileName:=sfilename; //存入文件savedialog.Filter:='Excel文件(*.xls)|*.xls';if savedialog.Execute thenbeginif FileExists(savedialog.FileName) thentryif application.messagebox('该文件已经存在,要覆盖吗?','询问',mb_yesno+mb_iconquestion)=idyes thenDeleteFile(PChar(savedialog.FileName))elsebeginExcel.Quit;savedialog.free;//screen.cursor:=crDefault;Exit;end;exceptExcel.Quit;screen.cursor:=crDefault;Exit;end;filename:=savedialog.FileName;end;savedialog.free;if filename='' thenbeginresult:=true;Excel.Quit;//screen.cursor:=crDefault;exit;end;aSheet:=excel.Worksheets.Item[1];tsList:=TStringList.Create;//tsList.Add('查询结果'); //加入标题s:=''; //加入字段名for y := 0 to adoquery.fieldCount - 1 dobegins:=s+adoQuery.Fields.Fields[y].FieldName+#9 ;Application.ProcessMessages;end;tsList.Add(s);trytryADOQuery.First;While Not ADOQuery.Eof dobegins:='';for y:=0 to ADOQuery.FieldCount-1 dobegins:=s+ADOQuery.Fields[y].AsString+#9;Application.ProcessMessages;end;tsList.Add(s);ADOQuery.next;end;Clipboard.AsText:=tsList.Text;exceptresult:=false;end;finallytsList.Free;aSheet.Paste;MessageBox(Application.Handle,'数据导出完毕!','系统提示',MB_ICONINFORMA TION or MB_OK);tryif copy(FileName,length(FileName)-3,4)<>'.xls' thenFileName:=FileName+'.xls';Excel.ActiveWorkbook.SaveAs(FileName, xlNormal, '', '', False, False);exceptExcel.Quit;screen.cursor:=crDefault;exit;end;Excel.Visible := false; //true会自动打开已经保存的excelExcel.Quit;Excel := UnAssigned;end;调用:ToExcel('D:\a.xsl',QueryToExcel);//路径可以自定义-------------------------------------------------------------------------------------------------******************************************************************************************* ******二、delphi如何导出EXCEL,代码。

非第3方控件首先在Uses处加上ComObjprocedure TForm1.Button1Click(Sender: TObject);var h,k:integer;Excelid: OleVariant;s: string;begintryExcelid := CreateOLEObject('Excel.Application');exceptApplication.MessageBox('Excel没有安装!', '提示信息', MB_OK+MB_ICONASTERISK+MB_DEFBUTTON1+MB_APPLMODAL);Exit;end;tryADOQuery1.Close;ADOQuery1.SQL.Clear;ADOQuery1.Open;k:=ADOQuery1.RecordCount;Excelid.Visible := True;Excelid.WorkBooks.Add;Excelid.worksheets[1].range['A1:c1'].Merge(True);Excelid.WorkSheets[1].Cells[1,1].Value :='部门编码表' ;Excelid.worksheets[1].Range['a1:a1'].HorizontalAlignment := $FFFFEFF4;Excelid.worksheets[1].Range['a1:a1'].VerticalAlignment := $FFFFEFF4;Excelid.WorkSheets[1].Cells[2,1].Value := '组别编号';Excelid.WorkSheets[1].Cells[2,2].Value := '公司编号';Excelid.WorkSheets[1].Cells[2,3].Value := '组别名称';Excelid.worksheets[1].Range['A1:c1'] := '宋体';Excelid.worksheets[1].Range['A1:c1'].Font.Size := 9;Excelid.worksheets[1].range['A1:c2'].font.bold:=true;Excelid.worksheets[1].Range['A2:c2'].Font.Size := 9;Excelid.worksheets[1].Range['A2:c2'].HorizontalAlignment := $FFFFEFF4;Excelid.worksheets[1].Range['A2:c2'].VerticalAlignment := $FFFFEFF4;h:=3;ADOQuery1.First;while not ADOQuery1.Eof dobegin Excelid.WorkSheets[1].Cells[h,1].Value := Adoquery1.FieldByName('Fdept_id').AsString; Excelid.WorkSheets[1].Cells[h,2].Value := Adoquery1.FieldByName('Ffdept_id').AsString;Excelid.WorkSheets[1].Cells[h,3].Value := Adoquery1.FieldByName('Fdept_name').AsString;Inc(h);Adoquery1.Next;end;s := 'A2:f'+ IntToStr(k+2);Excelid.worksheets[1].Range[s] := '宋体';Excelid.worksheets[1].Range[s].Font.size := 9;Excelid.worksheets[1].Range[s].Borders.LineStyle := 1;Excelid.Quit;exceptApplication.MessageBox('导入数据出错!请检查文件的格式是否正确!', '提示信息', MB_OK+MB_ICONASTERISK+MB_DEFBUTTON1+MB_APPLMODAL);end;MessageBox(GetActiveWindow(), 'EXCEL数据导出成功!', '提示信息', MB_OK +MB_ICONW ARNING); end;-----------------------------------------------------------------------------------------------------------------------------------------------******************************************************************************************* *********************************************三、delphi导出EXCELWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, Mask, ComCtrls, StdCtrls, Buttons, Grids, ValEdit, IdBaseComponent, CheckLst, excel97, ExcelXP, OleServer, ComObj, excel2000, mmsystem, ShellAPI, ADODB, DB, DBGrids, clipbrd;VarFExcel:OleVariant; //excel应用程序FWorkBook :OleVariant; //工作表Temsheet:OleVariant; //工作薄FPicture:OleVariant;//图片tmpstr:String;range:variant;//范围i,j,TemInt:integer;TemFileName:String;beginSaveDialog1.Filter:='.xls';if SaveDialog1.Execute thenbeginTemFileName:=SaveDialog1.FileName+'.xls';Screen.Cursor:=CrHourGlass;TemInt:=0;FExcel:= CreateoleObject('excel.Application');FWorkBook:=FExcel.WorkBooks.Add(-4167); //新的工作表Temsheet:=FWorkBook.Worksheets.Add;:='利润统计';Temsheet.Select;Temsheet.Columns[1].ColumnWidth:=4;//设置列宽度Temsheet.Columns[2].ColumnWidth:=10;Temsheet.Columns[3].ColumnWidth:=16;Temsheet.Columns[4].ColumnWidth:=10;Temsheet.Columns[5].ColumnWidth:=10;Temsheet.Columns[6].ColumnWidth:=10;Temsheet.Columns[7].ColumnWidth:=10;Temsheet.Columns[8].ColumnWidth:=10;Temsheet.Columns[9].ColumnWidth:=20;Temsheet.Columns[10].ColumnWidth:=15;range:=Temsheet.Range[Temsheet.cells[1,1],Temsheet.cells[5,2]];//选定表格range.select;range.merge; //合并单元格FPicture:=Temsheet.Pictures.Insert(tmpstr);FPicture.Left:=20;FPicture.Top:=5;FPicture.width:=50;FPicture.height:=50;FPicture:=null;range:=Temsheet.Range[Temsheet.cells[2,3],Temsheet.cells[3,4]];//选定表格range.select;range.merge;Range.Characters.Font.FontStyle :='加粗';Temsheet.Cells[2,3].HorizontalAlignment:=-4108; //字居中Temsheet.Cells[2,3]:=ComSName;range:=Temsheet.Range[Temsheet.cells[4,3],Temsheet.cells[4,4]];//选定表格range.select;range.merge;Temsheet.Cells[4,3].HorizontalAlignment:=-4108; //字居中Temsheet.Cells[4,3]:=ComEName;range:=Temsheet.Range[Temsheet.cells[2,5],Temsheet.cells[2,6]];//选定表格range.select;range.merge;Temsheet.Cells[2,5].HorizontalAlignment:=-4108; //字居中Temsheet.Cells[2,5]:=ComName;Temsheet.Cells[3,5]:='联系人:';Temsheet.Cells[4,5]:='电话:';Temsheet.Cells[4,6]:=ComPhone;Temsheet.Cells[5,5]:='传真:';Temsheet.Cells[5,6]:=ComFax;range:=Temsheet.Range[Temsheet.cells[6,1],Temsheet.cells[6,10]];//选定表格range.select;range.merge;range:=Temsheet.Range[Temsheet.cells[7,1],Temsheet.cells[7,2]];//选定表格range.select;range.merge;Range.Characters.Font.FontStyle :='加粗';Temsheet.Cells[7,1]:='入库信息:';range:=Temsheet.Range[Temsheet.cells[7,3],Temsheet.cells[7,10]];//选定表格range.select;Temsheet.Cells[8,1]:='序号';Temsheet.Cells[8,1].HorizontalAlignment:=-4108; //字居中Temsheet.Cells[8,1].Interior.Color:=clGray; //单元格背景色range:=Temsheet.Range[Temsheet.cells[8,1],Temsheet.cells[8,1]];//选定表格range.borders.linestyle:=1;//华线for i:=0 to DBGrid1.Columns.Count - 1 dobeginTemsheet.Cells[8,i+2]:=DBGrid1.Columns[i].Title.Caption;Temsheet.Cells[8,i+2].HorizontalAlignment:=-4108; //字居中Temsheet.Cells[8,i+2].Interior.Color:=clGray; //单元格背景色range:=Temsheet.Range[Temsheet.cells[8,i+2],Temsheet.cells[8,i+2]];//选定表格range.borders.linestyle:=1;//华线end;//////////////////////////////////////////////j:=0;DBGrid1.DataSource.DataSet.First;while not DBGrid1.DataSource.DataSet.Eof dobeginTemsheet.Cells[9+j,1].Value:=j+1;Temsheet.Cells[9+j,1].HorizontalAlignment:=-4108; //字居中range:=Temsheet.Range[Temsheet.cells[9+j,1],Temsheet.cells[9+j,1]];//选定表格range.borders.linestyle:=1;//华线for i:=0 to DBGrid1.Columns.Count - 1 dobeginTemsheet.Cells[9+j,i+2].Value:=DBGrid1.Fields[i].AsString;range:=Temsheet.Range[Temsheet.cells[9+j,i+2],Temsheet.cells[9+j,i+2]];//选定表格range.borders.linestyle:=1;//华线end;DBGrid1.DataSource.DataSet.Next;j:=j+1;end;TemInt:=9+ DBGrid1.DataSource.DataSet.RecordCount;range:=Temsheet.Range[Temsheet.cells[TemInt,1],Temsheet.cells[TemInt,10]];//选定表格range.select;range.merge;TemInt:=TemInt+1;range.select;range.merge;Range.Characters.Font.FontStyle :='加粗';Temsheet.Cells[TemInt,1]:='出库信息:';range:=Temsheet.Range[Temsheet.cells[TemInt,3],Temsheet.cells[TemInt,10]];//选定表格range.select;range.merge;TemInt:=TemInt+1;Temsheet.Cells[TemInt,1]:='序号';Temsheet.Cells[TemInt,1].HorizontalAlignment:=-4108; //字居中Temsheet.Cells[TemInt,1].Interior.Color:=clGray; //单元格背景色range:=Temsheet.Range[Temsheet.cells[TemInt,1],Temsheet.cells[TemInt,1]];//选定表格range.borders.linestyle:=1;//华线for i:=0 to DBGrid2.Columns.Count - 1 dobeginTemsheet.Cells[TemInt,i+2]:=DBGrid2.Columns[i].Title.Caption;Temsheet.Cells[TemInt,i+2].HorizontalAlignment:=-4108; //字居中Temsheet.Cells[TemInt,i+2].Interior.Color:=clGray; //单元格背景色range:=Temsheet.Range[Temsheet.cells[TemInt,i+2],Temsheet.cells[TemInt,i+2]];//选定表格range.borders.linestyle:=1;//华线end;TemInt:=TemInt+1;//////////////////////////////////////////////j:=0;DBGrid2.DataSource.DataSet.First;while not DBGrid2.DataSource.DataSet.Eof dobeginTemsheet.Cells[TemInt+j,1].Value:=j+1;Temsheet.Cells[TemInt+j,1].HorizontalAlignment:=-4108; //字居中range:=Temsheet.Range[Temsheet.cells[TemInt+j,1],Temsheet.cells[TemInt+j,1]];//选定表格range.borders.linestyle:=1;//华线for i:=0 to DBGrid2.Columns.Count - 1 dobeginTemsheet.Cells[TemInt+j,i+2].Value:=DBGrid2.Fields[i].AsString;range:=Temsheet.Range[Temsheet.cells[TemInt+j,i+2],Temsheet.cells[TemInt+j,i+2]];//选定表格range.borders.linestyle:=1;//华线end;DBGrid2.DataSource.DataSet.Next;end;TemInt:=TemInt+ DBGrid2.DataSource.DataSet.RecordCount;TemInt:=TemInt+1;range:=Temsheet.Range[Temsheet.cells[TemInt,1],Temsheet.cells[TemInt,10]];//选定表格range.select;range.merge;TemInt:=TemInt+1;range:=Temsheet.Range[Temsheet.cells[TemInt,1],Temsheet.cells[TemInt,2]];//选定表格range.select;range.merge;Range.Characters.Font.FontStyle :='加粗';Temsheet.Cells[TemInt,1]:='入库总额:';Temsheet.Cells[TemInt,3]:=Trim(Edit1.Text);range:=Temsheet.Range[Temsheet.cells[TemInt,4],Temsheet.cells[TemInt,10]];//选定表格range.select;range.merge;TemInt:=TemInt+1;range:=Temsheet.Range[Temsheet.cells[TemInt,1],Temsheet.cells[TemInt,2]];//选定表格range.select;range.merge;Range.Characters.Font.FontStyle :='加粗';Temsheet.Cells[TemInt,1]:='出库总额:';Temsheet.Cells[TemInt,3]:=Trim(Edit2.Text);range:=Temsheet.Range[Temsheet.cells[TemInt,4],Temsheet.cells[TemInt,10]];//选定表格range.select;range.merge;TemInt:=TemInt+1;range:=Temsheet.Range[Temsheet.cells[TemInt,1],Temsheet.cells[TemInt,2]];//选定表格range.select;range.merge;Range.Characters.Font.FontStyle :='加粗';Temsheet.Cells[TemInt,1]:='总利润:';Temsheet.Cells[TemInt,3]:=Trim(Edit3.Text);range:=Temsheet.Range[Temsheet.cells[TemInt,4],Temsheet.cells[TemInt,10]];//选定表格range.select;range.merge;range:=Temsheet.Range[Temsheet.cells[7,1],Temsheet.cells[TemInt,10]];//选定表格range.borders.linestyle:=1;//华线Application.ProcessMessages;Screen.Cursor:=CrDefault;FExcel.WorkBooks[1].saveas(TemFileName);//保存文件FExcel.workbooks[1].close; //关闭工作表Application.ProcessMessages;MessageBox(Handle,'导出成功','提示',MB_OK);//FExcel.visible:=true;FExcel.quit; //关闭ExcelFExcel := unassigned;shellexecute(0,'open',PChar(ExtractFileName(TemFileName)),nil,PChar(ExtractFilePath(TemFileName)),SW_Sh ow);end;end;--------------------------------------------------------------------------------------------------------------------******************************************************************************************* *************************四、导出到ExcelusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, ExtCtrls, Mask, ComCtrls, StdCtrls, Buttons, Grids, ValEdit, IdBaseComponent,CheckLst, excel97, ExcelXP, OleServer, comobj, excel2000, mmsystem,ADODB, DB, DBGrids, clipbrd;procedure TFIND_FM.Button1Click(Sender: TObject);vari,j : integer;reportname, wpath : string;ExApp1 : TExcelApplication;ExWrbk1 : TExcelWorkbook;ExWrst1 : TExcelWorksheet;beginif Main_FM.ADOQuery_TEMP.IsEmpty thenbeginShowmessage('沒有可導出的資料!');Exit;endbeginMain_FM.SaveDialog1.FileName := 'qcreport';if Main_FM.savedialog1.Execute thenbegin//savedialog1.FileName := formatdatetime('YYYYMMDDHHMMSS',now())+'md_orderqc_list.xls';reportname := formatdatetime('YYYYMMDDHHMMSS',now())+ExtractFileName(Main_FM.savedialog1.FileName);//reportname := formatdatetime('YYYYMMDDHHMMSS',now())+'';wpath := ExtractFilePath(Main_FM.savedialog1.FileName);//showmessage(wpath);tryExApp1 := TExcelApplication.Create(application);ExWrbk1 := TExcelWorkbook.Create(application);ExWrst1 := TExcelWorksheet.Create(application);ExApp1.Connect;exceptShowmessage('電腦沒裝Excel!無法導出!');Abort;end;trytryExApp1.Workbooks.Add(EmptyParam,0);ExWrbk1.ConnectTo(ExApp1.Workbooks[1]);ExWrst1.ConnectTo(ExWrbk1.Worksheets[1] as _worksheet);Main_FM.ADOQuery_TEMP.First;for j := 0 to Main_FM.ADOQuery_TEMP.FieldCount-1 dobeginExWrst1.Cells.Item[1,j+1] := Main_FM.ADOQuery_TEMP.Fields[j].DisplayName;//end;for i := 2 to Main_FM.ADOQuery_TEMP.RecordCount+1 dobeginfor j := 0 to Main_FM.ADOQuery_TEMP.FieldCount-1 dobeginExWrst1.Cells.Item[i,j+1] := Main_FM.ADOQuery_TEMP.Fields[j].Value;end;Main_FM.ADOQuery_TEMP.Next;end;ExWrst1.SaveAs(wpath+reportname);//ExWrst.SaveAs(formatdatetime('YYYYMMDDHHMMSS',now())+reportname);;Showmessage('數據已成功導出!');exceptShowmessage('導出失敗!');abort;end;finallyExApp1.Disconnect;ExApp1.Quit;ExApp1.Free;ExWrbk1.Free;ExWrst1.Free;end;end;end;end;--------------------------------------------------------------------------------------------------******************************************************************************************* *******delphi导出数据至Excel的三种方法及比较闲来无事,跑到网上搜集了几种导出DataSet至Excel的几种方法。

相关主题