本文来自 爱好者8888 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/kpc2000/article/details/17066823?utm_source=copy

===================================================================================================

第一种方法delphi 快速导出excel

uses ComObj,clipbrd;
function ToExcel(sfilename:string; ADOQuery:TADOQuery):boolean;
const
xlNormal=-;
var
y : integer;
tsList : TStringList;
s,filename :string;
aSheet :Variant;
excel :OleVariant;
savedialog :tsavedialog;
begin
Result := true;
try
excel:=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 then
begin
if FileExists(savedialog.FileName) then
try
if application.messagebox('该文件已经存在,要覆盖吗?','询问',mb_yesno+mb_iconquestion)=idyes
then
DeleteFile(PChar(savedialog.FileName))
else
begin
Excel.Quit;
savedialog.free;
//screen.cursor:=crDefault;
Exit;
end;
except
Excel.Quit;
savedialog.free;
screen.cursor:=crDefault;
Exit;
end;
filename:=savedialog.FileName;
end;
savedialog.free;
if filename='' then
begin
result:=true;
Excel.Quit;
//screen.cursor:=crDefault;
exit;
end;
aSheet:=excel.Worksheets.Item[];
tsList:=TStringList.Create;
//tsList.Add('查询结果'); //加入标题 s:=''; //加入字段名 for y := 0 to adoquery.fieldCount - 1 do
begin
s:=s+adoQuery.Fields.Fields[y].FieldName+# ;
Application.ProcessMessages;
end;
tsList.Add(s);
try
try
ADOQuery.First;
While Not ADOQuery.Eof do
begin
s:='';
for y:= to ADOQuery.FieldCount- do
begin
s:=s+ADOQuery.Fields[y].AsString+#;
Application.ProcessMessages;
end;
tsList.Add(s);
ADOQuery.next;
end;
Clipboard.AsText:=tsList.Text;
except
result:=false;
end;
finally
tsList.Free;
end;
aSheet.Paste;
MessageBox(Application.Handle,'数据导出完毕!','系统提示',MB_ICONINFORMATION
or MB_OK);
try
if copy(FileName,length(FileName)-,)<>'.xls' then
FileName:=FileName+'.xls';
Excel.ActiveWorkbook.SaveAs(FileName, xlNormal, '', '', False, False);
except
Excel.Quit;
screen.cursor:=crDefault;
exit;
end;
Excel.Visible := false; //true会自动打开已经保存的excel
Excel.Quit;
Excel := UnAssigned; end;

调用:         ToExcel('D:\a.xsl',QueryToExcel);//路径可以自定义

------------------------------------------------------------------------------------------------- *************************************************************************************************

二; delphi如何导出EXCEL,代码。非第3方控件首先在Uses处加上ComObj

procedure TForm1.Button1Click(Sender: TObject);
var h,k:integer;
Excelid: OleVariant;
s: string;
begin
try
Excelid := CreateOLEObject('Excel.Application');
except
Application.MessageBox('Excel没有安装!', '提示信息',
MB_OK+MB_ICONASTERISK+MB_DEFBUTTON1+MB_APPLMODAL);
Exit;
end;
try
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from jj_department');
ADOQuery1.Open;
k:=ADOQuery1.RecordCount;
Excelid.Visible := True;
Excelid.WorkBooks.Add;
Excelid.worksheets[].range['A1:c1'].Merge(True);
Excelid.WorkSheets[].Cells[,].Value :='部门编码表' ;
Excelid.worksheets[].Range['a1:a1'].HorizontalAlignment := $FFFFEFF4;
Excelid.worksheets[].Range['a1:a1'].VerticalAlignment := $FFFFEFF4;
Excelid.WorkSheets[].Cells[,].Value := '组别编号';
Excelid.WorkSheets[].Cells[,].Value := '公司编号';
Excelid.WorkSheets[].Cells[,].Value := '组别名称';
Excelid.worksheets[].Range['A1:c1'].Font.Name := '宋体';
Excelid.worksheets[].Range['A1:c1'].Font.Size := ;
Excelid.worksheets[].range['A1:c2'].font.bold:=true;
Excelid.worksheets[].Range['A2:c2'].Font.Size := ;
Excelid.worksheets[].Range['A2:c2'].HorizontalAlignment := $FFFFEFF4;
Excelid.worksheets[].Range['A2:c2'].VerticalAlignment := $FFFFEFF4;
h:=;
ADOQuery1.First;
while not ADOQuery1.Eof do
begin Excelid.WorkSheets[].Cells[h,].Value := Adoquery1.FieldByName('Fdept_id').AsString;
Excelid.WorkSheets[].Cells[h,].Value := Adoquery1.FieldByName('Ffdept_id').AsString;
Excelid.WorkSheets[].Cells[h,].Value := Adoquery1.FieldByName('Fdept_name').AsString;
Inc(h);
Adoquery1.Next;
end;
s := 'A2:f'+ IntToStr(k+);
Excelid.worksheets[].Range[s].Font.Name := '宋体';
Excelid.worksheets[].Range[s].Font.size := ;
Excelid.worksheets[].Range[s].Borders.LineStyle := ;
Excelid.Quit;
except
Application.MessageBox('导入数据出错!请检查文件的格式是否正确!', '提示信息',
MB_OK+MB_ICONASTERISK+MB_DEFBUTTON1+MB_APPLMODAL);
end;
MessageBox(GetActiveWindow(), 'EXCEL数据导出成功!', '提示信息',
MB_OK +MB_ICONWARNING);
end;

三; delphi导出EXCEL

uses
Windows, 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;
Var
FExcel:OleVariant; //excel应用程序 FWorkBook :OleVariant; //工作表 Temsheet:OleVariant; //工作薄 FPicture:OleVariant;//图片 tmpstr:String;
range:variant;//范围 i,j,TemInt:integer;
TemFileName:String;
begin
SaveDialog1.Filter:='.xls';
if SaveDialog1.Execute then
begin
TemFileName:=SaveDialog1.FileName+'.xls'; Screen.Cursor:=CrHourGlass;
TemInt:=;
FExcel:= CreateoleObject('excel.Application');
FWorkBook:=FExcel.WorkBooks.Add(-); //新的工作表 Temsheet:=FWorkBook.Worksheets.Add;
Temsheet.Name:='利润统计';
Temsheet.Select;
Temsheet.Columns[].ColumnWidth:=;//设置列宽度 Temsheet.Columns[2].ColumnWidth:=10;
Temsheet.Columns[].ColumnWidth:=;
Temsheet.Columns[].ColumnWidth:=;
Temsheet.Columns[].ColumnWidth:=;
Temsheet.Columns[].ColumnWidth:=;
Temsheet.Columns[].ColumnWidth:=;
Temsheet.Columns[].ColumnWidth:=;
Temsheet.Columns[].ColumnWidth:=;
Temsheet.Columns[].ColumnWidth:=;
range:=Temsheet.Range[Temsheet.cells[,],Temsheet.cells[,]];//选定表格 range.select;
range.merge; //合并单元格 tmpstr:=ExtractFilePath(ParamStr(0))+'tem.jpg'; //添加图片 FPicture:=Temsheet.Pictures.Insert(tmpstr);
FPicture.Left:=;
FPicture.Top:=;
FPicture.width:=;
FPicture.height:=;
FPicture:=null;
range:=Temsheet.Range[Temsheet.cells[,],Temsheet.cells[,]];//选定表格 range.select;
range.merge;
Range.Characters.Font.FontStyle :='加粗';
Temsheet.Cells[,].HorizontalAlignment:=-; //字居中 Temsheet.Cells[2,3]:=ComSName;
range:=Temsheet.Range[Temsheet.cells[,],Temsheet.cells[,]];//选定表格 range.select;
range.merge;
Temsheet.Cells[,].HorizontalAlignment:=-; //字居中 Temsheet.Cells[4,3]:=ComEName;
range:=Temsheet.Range[Temsheet.cells[,],Temsheet.cells[,]];//选定表格 range.select;
range.merge;
Temsheet.Cells[,].HorizontalAlignment:=-; //字居中 Temsheet.Cells[2,5]:=ComName;
Temsheet.Cells[,]:='联系人:';
Temsheet.Cells[,]:='电话:';
Temsheet.Cells[,]:=ComPhone;
Temsheet.Cells[,]:='传真:';
Temsheet.Cells[,]:=ComFax;
range:=Temsheet.Range[Temsheet.cells[,],Temsheet.cells[,]];//选定表格 range.select;
range.merge;
range:=Temsheet.Range[Temsheet.cells[,],Temsheet.cells[,]];//选定表格 range.select;
range.merge;
Range.Characters.Font.FontStyle :='加粗';
Temsheet.Cells[,]:='入库信息:';
range:=Temsheet.Range[Temsheet.cells[,],Temsheet.cells[,]];//选定表格 range.select;
range.merge;
Temsheet.Cells[,]:='序号';
Temsheet.Cells[,].HorizontalAlignment:=-; //字居中 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 do
begin
Temsheet.Cells[,i+]:=DBGrid1.Columns[i].Title.Caption;
Temsheet.Cells[,i+].HorizontalAlignment:=-; //字居中 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:=;
DBGrid1.DataSource.DataSet.First;
while not DBGrid1.DataSource.DataSet.Eof do
begin
Temsheet.Cells[+j,].Value:=j+;
Temsheet.Cells[+j,].HorizontalAlignment:=-; //字居中 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 do
begin
Temsheet.Cells[+j,i+].Value:=DBGrid1.Fields[i].AsString;
range:=Temsheet.Range[Temsheet.cells[+j,i+],Temsheet.cells[+j,i+]];//选定表格 range.borders.linestyle:=1;//华线 end;
DBGrid1.DataSource.DataSet.Next;
j:=j+;
end;
TemInt:=+ DBGrid1.DataSource.DataSet.RecordCount;
range:=Temsheet.Range[Temsheet.cells[TemInt,],Temsheet.cells[TemInt,]];//选定表格 range.select;
range.merge;
TemInt:=TemInt+;
range:=Temsheet.Range[Temsheet.cells[TemInt,],Temsheet.cells[TemInt,]];//选定表格 range.select;
range.merge;
Range.Characters.Font.FontStyle :='加粗';
Temsheet.Cells[TemInt,]:='出库信息:'; range:=Temsheet.Range[Temsheet.cells[TemInt,],Temsheet.cells[TemInt,]];//选定表格 range.select;
range.merge;
TemInt:=TemInt+;
Temsheet.Cells[TemInt,]:='序号';
Temsheet.Cells[TemInt,].HorizontalAlignment:=-; //字居中 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 do
begin
Temsheet.Cells[TemInt,i+]:=DBGrid2.Columns[i].Title.Caption;
Temsheet.Cells[TemInt,i+].HorizontalAlignment:=-; //字居中 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+;
//////////////////////////////////////////////
j:=;
DBGrid2.DataSource.DataSet.First;
while not DBGrid2.DataSource.DataSet.Eof do
begin
Temsheet.Cells[TemInt+j,].Value:=j+;
Temsheet.Cells[TemInt+j,].HorizontalAlignment:=-; //字居中 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 do
begin
Temsheet.Cells[TemInt+j,i+].Value:=DBGrid2.Fields[i].AsString;
range:=Temsheet.Range[Temsheet.cells[TemInt+j,i+],Temsheet.cells[TemInt+j,i+]];//选定表格 range.borders.linestyle:=1;//华线 end;
DBGrid2.DataSource.DataSet.Next;
j:=j+;
end;
TemInt:=TemInt+ DBGrid2.DataSource.DataSet.RecordCount;
TemInt:=TemInt+; range:=Temsheet.Range[Temsheet.cells[TemInt,],Temsheet.cells[TemInt,]];//选定表格 range.select;
range.merge;
TemInt:=TemInt+;
range:=Temsheet.Range[Temsheet.cells[TemInt,],Temsheet.cells[TemInt,]];//选定表格 range.select;
range.merge;
Range.Characters.Font.FontStyle :='加粗';
Temsheet.Cells[TemInt,]:='入库总额:';
Temsheet.Cells[TemInt,]:=Trim(Edit1.Text);
range:=Temsheet.Range[Temsheet.cells[TemInt,],Temsheet.cells[TemInt,]];//选定表格 range.select;
range.merge;
TemInt:=TemInt+;
range:=Temsheet.Range[Temsheet.cells[TemInt,],Temsheet.cells[TemInt,]];//选定表格 range.select;
range.merge;
Range.Characters.Font.FontStyle :='加粗';
Temsheet.Cells[TemInt,]:='出库总额:';
Temsheet.Cells[TemInt,]:=Trim(Edit2.Text);
range:=Temsheet.Range[Temsheet.cells[TemInt,],Temsheet.cells[TemInt,]];//选定表格 range.select;
range.merge;
TemInt:=TemInt+;
range:=Temsheet.Range[Temsheet.cells[TemInt,],Temsheet.cells[TemInt,]];//选定表格 range.select;
range.merge;
Range.Characters.Font.FontStyle :='加粗';
Temsheet.Cells[TemInt,]:='总利润:';
Temsheet.Cells[TemInt,]:=Trim(Edit3.Text);
range:=Temsheet.Range[Temsheet.cells[TemInt,],Temsheet.cells[TemInt,]];//选定表格 range.select;
range.merge; range:=Temsheet.Range[Temsheet.cells[,],Temsheet.cells[TemInt,]];//选定表格 range.borders.linestyle:=1;//华线 Application.ProcessMessages;
Screen.Cursor:=CrDefault;
FExcel.WorkBooks[].saveas(TemFileName);//保存文件 FExcel.workbooks[1].close; //关闭工作表 Application.ProcessMessages;
MessageBox(Handle,'导出成功','提示',MB_OK);
//FExcel.visible:=true;
FExcel.quit; //关闭Excel
FExcel := unassigned;
shellexecute(,'open',PChar(ExtractFileName(TemFileName)),nil,PChar(ExtractFilePath(TemFileName)),SW_Show); end;
end;

四;

uses
Windows, 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);
var
i,j : integer;
reportname, wpath : string;
ExApp1 : TExcelApplication;
ExWrbk1 : TExcelWorkbook;
ExWrst1 : TExcelWorksheet;
begin if Main_FM.ADOQuery_TEMP.IsEmpty then
begin
Showmessage('沒有可導出的資料!');
Exit;
end
else
begin
Main_FM.SaveDialog1.FileName := 'qcreport';
if Main_FM.savedialog1.Execute then
begin
//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);
try
ExApp1 := TExcelApplication.Create(application);
ExWrbk1 := TExcelWorkbook.Create(application);
ExWrst1 := TExcelWorksheet.Create(application);
ExApp1.Connect;
except
Showmessage('電腦沒裝Excel!無法導出!');
Abort;
end;
try
try
ExApp1.Workbooks.Add(EmptyParam,);
ExWrbk1.ConnectTo(ExApp1.Workbooks[]);
ExWrst1.ConnectTo(ExWrbk1.Worksheets[] as _worksheet);
Main_FM.ADOQuery_TEMP.First;
for j := to Main_FM.ADOQuery_TEMP.FieldCount- do
begin
ExWrst1.Cells.Item[,j+] := Main_FM.ADOQuery_TEMP.Fields[j].DisplayName;
//
end;
for i := to Main_FM.ADOQuery_TEMP.RecordCount+ do
begin
for j := to Main_FM.ADOQuery_TEMP.FieldCount- do
begin
ExWrst1.Cells.Item[i,j+] := 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('數據已成功導出!');
except
Showmessage('導出失敗!');
abort;
end;
finally
ExApp1.Disconnect;
ExApp1.Quit;
ExApp1.Free;
ExWrbk1.Free;
ExWrst1.Free;
end;
end;
end;
end;

delphi导出数据至Excel的三种方法及比较闲来无事,跑到网上搜集了几种导出DataSet至Excel的几种方法。另外使用GetTickcount函数计算时差,以便比较。(本来使用Timer控件,但是Timer不适合做高精度时间计算)使用TADOConnect,TADOQuery查询数据。方法五:   使用TADOQuery + Varaint方法,循环遍历数据集中数据,直接插入到Excel的WookBook单元。这是初学者最易懂和易接受的方法。在下面代码中没有仔细注意语法(比如没有使用try..finally结构体),如果需要使用,请注意://使用ADO循环方式保存。

procedure TForm1.btn_WhileClick(Sender: TObject);
var
Eclapp:variant;
n:integer;
filename: string;
t1,t2: Int64;
begin
Eclapp := CreateOleObject('Excel.Application');
Eclapp.WorkBooks.Add;
Eclapp.Visible:= False;
filename :='d:\数据1.xls';
lbl2.Caption := '';
if FileExists(fileName) then
DeleteFile(fileName);
t1:= GetTickCount;
qry1.DisableControls;
qry1.First;
n:=;
while not qry1.Eof do
begin
eclapp.cells[n,] := qry1.Fields[].AsString;
eclapp.cells[n,] := qry1.Fields[].AsString;
eclapp.cells[n,] := qry1.Fields[].AsString;
eclapp.cells[n,] := qry1.Fields[].AsString;
//为了简单,只添加了4个栏位 inc(n);
qry1.Next;
application.ProcessMessages;
end;
qry1.EnableControls;
t2:= GetTickCount;
eclapp.visible := false;
eclapp.Workbooks[].SaveAs(filename);
Eclapp.Quit;
Eclapp:= Unassigned;
lbl2.Caption := IntToStr(t2 - t1);
end;

方法六:使用OLE方法导入。   先讲TDateSet中的数据保存为二维OLEVariant数组中,再保存到Excel  Sheet中  ///使用OLE方式保存。

procedure
TForm1.btn_OleVariantClick(Sender: TObject);
var
fileName: string;
xlApp, Sheet: OleVariant;
rowCount, Colcount, index: Integer;
t1,t2: Int64;
function RefToCell(RowID, ColID: Integer): string;
var
ACount, APos: Integer;
begin
ACount := ColID div ;
APos := ColID mod ;
if APos = then
begin
ACount := ACount - ;
APos := ;
end;
if ACount = then
Result := Chr(Ord('A') + ColID - ) + IntToStr(RowID);
if ACount = then
Result := 'A' + Chr(Ord('A') + APos - ) + IntToStr(RowID);
if ACount > then
Result := Chr(Ord('A') + ACount - ) + Chr(Ord('A') + APos - ) + IntToStr(RowID);
end;
function getData(ds: TDataSet): OleVariant;
var
Data: OLEVariant;
i,j : Integer;
begin
rowCount := ds.RecordCount;
colCount := ds.FieldCount;
Data := VarArrayCreate([, rowCount + , , colCount], varVariant); //1,rowCount
表示第一维数组的上下标,,colCount表示第二维数组的上下标 i := ;
for j := to colCount - do
begin
if not ds.Fields[j].Visible then
continue;
Data[i,j + ] := ds.Fields[j].DisplayLabel;
end;
Inc(i);
ds.DisableControls;
try
ds.First;
while not ds.Eof do
begin
for j := to colCount - do
begin
Data[i,j + ] := ds.Fields[j].AsString;
end;
Inc(i);
ds.Next;
Application.ProcessMessages;
end;
finally
ds.EnableControls;
end;
result := Data;
end;
begin
fileName := 'd:\数据.xls';
lbl1.Caption := '';
t1:= GetTickCount;//开始计时if FileExists(fileName) then
DeleteFile(fileName);
xlApp := CreateOleObject('Excel.Application');
try
XLApp.Visible := False;
XLApp.DisplayAlerts := False;
XLApp.Workbooks.Add;
// 删除多余的 worksheet
for index := XLApp.SheetsInNewWorkbook downto do
begin
XLApp.Workbooks[].Worksheets[index].Delete;
end;
Sheet := XLApp.Workbooks[].Worksheets[];
index := ;
if index <> then
Sheet := XLApp.Workbooks[].Worksheets.Add;
Sheet.Name := qry1.Name;
//Sheet.Columns.NumberFormatLocal := '@'; //设置单元格式为文本 Sheet.Range[RefToCell(1, 1), RefToCell(rowCount + 1, colCount)].Value := getData(qry1);
XLApp.Workbooks[].SaveAs(fileName);
finally
if not VarIsEmpty(XLApp) then
begin
XLApp.Quit;
XLAPP := Unassigned;
Sheet := Unassigned;
application.ProcessMessages;
t2:= GetTickCount;
lbl1.Caption := IntToStr( t2 - t1);
end;
end;
end;

方法七:现在最流行的文件流方法

.....
var
Form1: TForm1;
arXlsBegin: array[..] of Word = ($, , , $, , );
arXlsEnd: array[..] of Word = ($0A, );
arXlsString: array[..] of Word = ($, , , , , );
arXlsNumber: array[..] of Word = ($, , , , );
arXlsInteger: array[..] of Word = ($27E, , , , );
arXlsBlank: array[..] of Word = ($, , , , $);
Procedure ExportExcelFile(FileName: string; bWriteTitle: Boolean; aDataSet: TDataSet);
implementation
{$R *.dfm}
//使用文件流procedure incColRow; //增加行列号begin
if Col = ADataSet.FieldCount - then
begin
Inc(Row);
Col :=;
end
else
Inc(Col);
end;
procedure WriteStringCell(AValue: string);//写字符串数据var
L: Word;
begin
L := Length(AValue);
arXlsString[] := + L;
arXlsString[] := Row;
arXlsString[] := Col;
arXlsString[] := L;
aFileStream.WriteBuffer(arXlsString, SizeOf (arXlsString));
aFileStream.WriteBuffer(Pointer(AValue)^, L);
IncColRow;
end;
procedure WriteIntegerCell(AValue: integer);//写整数var
V: Integer;
begin
arXlsInteger[] := Row;
arXlsInteger[] := Col;
aFileStream.WriteBuffer(arXlsInteger, SizeOf(arXlsInteger));
V := (AValue shl ) or ;
aFileStream.WriteBuffer(V, );
IncColRow;
end;
procedure WriteFloatCell(AValue: double );//写浮点数begin
arXlsNumber[] := Row;
arXlsNumber[] := Col;
aFileStream.WriteBuffer(arXlsNumber, SizeOf(arXlsNumber));
aFileStream.WriteBuffer(AValue, );
IncColRow;
end;
Procedure ExportExcelFile(FileName: string; bWriteTitle: Boolean; aDataSet: TDataSet);
var
i,j: integer;
Col , row: word;
ABookMark: TBookMark;
aFileStream: TFileStream;
//......
//......
begin
if FileExists(FileName) then DeleteFile(FileName); //文件存在,先删除 aFileStream := TFileStream.Create(FileName, fmCreate);
Try //写文件头  aFileStream.WriteBuffer(arXlsBegin, SizeOf(arXlsBegin)); //写列头
  Col := ; Row := ;
if bWriteTitle then
begin
for i := to aDataSet.FieldCount - do
WriteStringCell(aDataSet.Fields[i].FieldName);
end; //写数据集中的数据
   aDataSet.DisableControls;
//ABookMark := aDataSet.GetBookmark;
aDataSet.First ;
while not aDataSet.Eof do
begin
for i := to aDataSet.FieldCount - do
case ADataSet.Fields[i].DataType of
ftSmallint, ftInteger, ftWord, ftAutoInc, ftBytes:
WriteIntegerCell(aDataSet.Fields[i].AsInteger);
ftFloat, ftCurrency, ftBCD:
WriteFloatCell(aDataSet.Fields[i].AsFloat)
else
WriteStringCell(aDataSet.Fields[i].AsString);
end;
aDataSet.Next;
Application.ProcessMessages;
end;
//写文件尾
  AFileStream.WriteBuffer(arXlsEnd, SizeOf(arXlsEnd));
//if ADataSet.BookmarkValid(ABookMark) then aDataSet.GotoBookmark(ABookMark);
Finally
AFileStream.Free;
ADataSet.EnableControls;
end;
end;
//调用:procedure TForm1.btn_FileStreamClick(Sender: TObject);
var
t1,t2: Int64;
begin
lbl3.Caption := '';
t1:= GetTickCount;
ExportExcelFile('d:\数据2.xls',true,qry1);
t2:= GetTickCount;
lbl3.Caption:= IntToStr(t2 - t1);
end;

delphi 导出到excel的7种方法的更多相关文章

  1. C#将DataTable数据导出到EXCEL的两种方法

    1.在非服务器控件的页面导出数据,需要借助一张temp空页面post回后台的数据. 前台:window.location.href = "../Temp.aspx"; 后台: tr ...

  2. C# - VS2019 DataGridView导出到Excel的三种方法

    //原文出处:http://www.yongfa365.com/Item/DataGridViewToExcel.html 1 #region DataGridView数据显示到Excel /// & ...

  3. Mysql查询结果导出为Excel的几种方法

    本文地址:http://www.cnblogs.com/qiaoyihang/p/6398673.html 具体原文找不到了,此篇是借鉴门户的一篇文章 方法一:查询语句直接输出语法格式: Exampl ...

  4. table导出到excel的两种方法

    1. 用table2excel 的js文件,这种方法没有IE兼容性 需要在文件中导入 <script type="text/javascript" src="< ...

  5. Delphi 导出数据至Excel的7种方法【转】

    一; delphi 快速导出excel   uses ComObj,clipbrd;   function ToExcel(sfilename:string; ADOQuery:TADOQuery): ...

  6. Delphi 导出数据至Excel的7种方法

    一; delphi 快速导出excel uses ComObj,clipbrd; function ToExcel(sfilename:string; ADOQuery:TADOQuery):bool ...

  7. .NET导出Excel的四种方法及评测

    .NET导出Excel的四种方法及评测 导出Excel是.NET的常见需求,开源社区.市场上,都提供了不少各式各样的Excel操作相关包.本文,我将使用NPOI.EPPlus.OpenXML.Aspo ...

  8. [转帖].NET导出Excel的四种方法及评测

    .NET导出Excel的四种方法及评测 https://www.cnblogs.com/sdflysha/p/20190824-dotnet-excel-compare.html 导出Excel是.N ...

  9. 2015.1.25 Delphi打开网址链接的几种方法

    Delphi打开网址链接的几种方法1.使用shellapi打开系统中默认的浏览器              首先需在头部引用 shellapi单元即在uses中添加shellapi,这里我们需要知道有 ...

随机推荐

  1. linux学习笔记 4建立用户

    一般用法  #useradd mysql 含义 创建 mysql用户 特殊用法 1> #useradd -d /usr/cjh -m cjh 含义:创建cjh用户 产生一个主目录 /usr/cj ...

  2. 一: WCF的服务端与客户端在通信时有三种模式:请求响应模式、数据报模式和双工通讯模式。

    说一下基本知识,  1.如果想要将当前接口作为wcf服务器,则一定要加上[ServiceContract] 契约 2.要想将方法作为wcf服务方法发布给外部调用,则一定要加上    [Operatio ...

  3. react 15.5版本的警告问题

    一.问题描述 前几天从git上拉下一个项目,cnpm i 安装依赖,项目跑起来后,发现有两个警告.之前这个项目都好好的,怎么突然报错了? Warning: Accessing PropTypes vi ...

  4. BZOJ.1109.[POI2007]堆积木Klo(DP LIS)

    BZOJ 二维\(DP\)显然.尝试换成一维,令\(f[i]\)表示,强制把\(i\)放到\(a_i\)位置去,现在能匹配的最多数目. 那么\(f[i]=\max\{f[j]\}+1\),其中\(j& ...

  5. JavaScript基础笔记(十二)Ajax

    Ajax 一.XMLHttpRequest对象 一)XHR用法 var xhr = new XMLHttpRequest(); //open()方法,参数一:发送方法,参数二:请求的URL,参数三:是 ...

  6. php error_log() 范例

    <?php// 如果无法连接到数据库,发送通知到服务器日志if (!Ora_Logon($username, $password)) {    error_log("Oracle da ...

  7. PHP 入门学习教程及进阶(源于知乎网友的智慧)

    思过崖历程: 自学的动机.自学的技巧.自学的目标三个方面描述学习PHP的经历 一.自学的动机: 一定要有浓厚的兴趣,兴趣是最后的老师,可以在你迷茫的时候不断地支撑着你走下去. 自学不是为了工作,不是为 ...

  8. 屏幕录制软件camtasia studio 8序列号激活

    注册名:TEAM MESMERiZE序列号:3MHCA-5DMCV-H89T8-V8GML-W6FB8 打开hosts文件:C:\Windows\System32\drivers\etc\hosts把 ...

  9. System.out.println()和System.err.println()

    在一次笔试中遇到了一个System.err.println()的输出,之前没有见过,回来查一查,自己还是见识太短,来补充一下. 首先看一看jdk中 来一个简单的实验 第一次显示 第二次显示 1. 发现 ...

  10. BZOJ3070 : [Pa2011]Prime prime power 质数的质数次方

    对于$a^b$,如果$b=2$,那么在$[\sqrt{n},\sqrt{n}+k\log k]$内必定能找到$k$个质数作为$a$. 筛出$n^{\frac{1}{4}}$内的所有质数,暴力枚举所有落 ...