《Delphi编程将数据库数据快速导入Excel.docx》由会员分享,可在线阅读,更多相关《Delphi编程将数据库数据快速导入Excel.docx(5页珍藏版)》请在金锄头文库上搜索。
1、 Delphi编程将数据库数据快速导入ExcelarXlsEnd: array0.1 of Word = ($0A, 00);arXlsString: array0.5 of Word = ($204, 0, 0, 0, 0, 0);arXlsNumber: array0.4 of Word = ($203, 14, 0, 0, 0);arXlsInteger: array0.4 of Word = ($27E, 10, 0, 0, 0);arXlsBlank: array0.4 of Word = ($201, 6, 0, 0, $17); 接着调用下面的函数。 Procedure Expo
2、rtExcelFile(FileName: string; bWriteTitle: Boolean; aDataSet: TDataSet); vari, j: integer;Col, row: word;ABookMark: TBookMark;aFileStream: TFileStream;procedure incColRow; /增加行列号beginif Col = ADataSet.FieldCount - 1 thenbeginInc(Row);Col :=0;endelseInc(Col);end;procedure WriteStringCell(AValue: stri
3、ng);/写字符串数据varL: Word;beginL := Length(AValue);arXlsString1 := 8 + L;arXlsString2 := Row;arXlsString3 := Col;arXlsString5 := L;aFileStream.WriteBuffer(arXlsString, SizeOf(arXlsString);aFileStream.WriteBuffer(Pointer(AValue), L);IncColRow;end;procedure WriteIntegerCell(AValue: integer);/写整数varV: Inte
4、ger;beginarXlsInteger2 := Row;arXlsInteger3 := Col;aFileStream.WriteBuffer(arXlsInteger, SizeOf(arXlsInteger);V := (AValue shl 2) or 2;aFileStream.WriteBuffer(V, 4);IncColRow;end;procedure WriteFloatCell(AValue: double);/写浮点数beginarXlsNumber2 := Row;arXlsNumber3 := Col;aFileStream.WriteBuffer(arXlsN
5、umber, SizeOf(arXlsNumber);aFileStream.WriteBuffer(AValue, 8);IncColRow;end;beginif FileExists(FileName) then DeleteFile(FileName); /文件存在,先删除aFileStream := TFileStream.Create(FileName, fmCreate);Try/写文件头aFileStream.WriteBuffer(arXlsBegin, SizeOf(arXlsBegin);/写列头Col := 0; Row := 0;if bWriteTitle then
6、beginfor i := 0 to aDataSet.FieldCount - 1 doWriteStringCell(aDataSet.Fieldsi.FieldName);end;/写数据集中的数据aDataSet.DisableControls;ABookMark := aDataSet.GetBookmark;aDataSet.First;while not aDataSet.Eof dobeginfor i := 0 to aDataSet.FieldCount - 1 docase ADataSet.Fieldsi.DataType offtSmallint, ftInteger
7、, ftWord, ftAutoInc, ftBytes:WriteIntegerCell(aDataSet.Fieldsi.AsInteger);ftFloat, ftCurrency, ftBCD:WriteFloatCell(aDataSet.Fieldsi.AsFloat)elseWriteStringCell(aDataSet.Fieldsi.AsString);end;aDataSet.Next;end;/写文件尾AFileStream.WriteBuffer(arXlsEnd, SizeOf(arXlsEnd);if ADataSet.BookmarkValid(ABookMark) then aDataSet.GotoBookmark(ABookMark);FinallyAFileStream.Free;ADataSet.EnableControls;end;end;