var
arXlsBegin: array[0..5] of Word = ($809, 8, 0, $10, 0, 0);
arXlsEnd: array[0..1] of Word = ($0A, 00);
arXlsString: array[0..5] of Word = ($204, 0, 0, 0, 0, 0);
arXlsNumber: array[0..4] of Word = ($203, 14, 0, 0, 0);
arXlsInteger: array[0..4] of Word = ($27E, 10, 0, 0, 0);
arXlsBlank: array[0..4] of Word = ($201, 6, 0, 0, $17);
接着调用下面的函数。
Procedure ExportExcelFile(FileName: string; bWriteTitle: Boolean; aDataSet: TDataSet);
var
i, j: integer;
Col, row: word;
ABookMark: TBookMark;
aFileStream: TFileStream;
procedure incColRow; //增加行列号
begin
if Col = ADataSet.FieldCount - 1 then
begin
Inc(Row);
Col :=0;
end
else
Inc(Col);
end;
procedure WriteStringCell(AValue: string);//写字符串数据
var
L: Word;
begin
L := Length(AValue);
arXlsString[1] := 8 + L;
arXlsString[2] := Row;
arXlsString[3] := Col;
arXlsString[5] := L;
aFileStream.WriteBuffer(arXlsString, SizeOf(arXlsString));
aFileStream.WriteBuffer(Pointer(AValue)^, L);
IncColRow;
end;
procedure WriteIntegerCell(AValue: integer);//写整数
var
V: Integer;
begin
arXlsInteger[2] := Row;
arXlsInteger[3] := Col;
aFileStream.WriteBuffer(arXlsInteger, SizeOf(arXlsInteger));
V := (AValue shl 2) or 2;
aFileStream.WriteBuffer(V, 4);
IncColRow;
end;
procedure WriteFloatCell(AValue: double);//写浮点数
begin
arXlsNumber[2] := Row;
arXlsNumber[3] := Col;
aFileStream.WriteBuffer(arXlsNumber, SizeOf(arXlsNumber));
aFileStream.WriteBuffer(AValue, 8);
IncColRow;
end;
begin
if FileExists(FileName) then DeleteFile(FileName); //文件存在,先删除
aFileStream := TFileStream.Create(FileName, fmCreate);
Try
//写文件头
aFileStream.WriteBuffer(arXlsBegin, SizeOf(arXlsBegin));
//写列头
Col := 0; Row := 0;
if bWriteTitle then
begin
for i := 0 to aDataSet.FieldCount - 1 do
WriteStringCell(aDataSet.Fields[i].FieldName);
end;
//写数据集中的数据
aDataSet.DisableControls;
ABookMark := aDataSet.GetBookmark;
aDataSet.First;
while not aDataSet.Eof do
begin
for i := 0 to aDataSet.FieldCount - 1 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;
end;
//写文件尾
AFileStream.WriteBuffer(arXlsEnd, SizeOf(arXlsEnd));
if ADataSet.BookmarkValid(ABookMark) then aDataSet.GotoBookmark(ABookMark);
Finally
AFileStream.Free;
ADataSet.EnableControls;
end;
end;
分享到:
相关推荐
怎么定时自动将SQL数据导出为Excel文件
将sql数据导出到excel是站长通常使用的一款用户说明工具,目的是将程序中的数据更清楚的展示给不懂的非程序设计者,也起到相关的保密工作,A5源码小编从网上找到这款sql数据导出到excel软件,希望可以帮助到有所需求...
SQLSERVER定时导出数据到Excel,Word,Access等 包含SQLServer的定时操作
SQL Server导出表到EXCEL文件的存储过程,整理sql如何把表导出
c#版sql2008数据导出到excel例子,c#版sql2008数据导出到excel例子。
sqlserver导出excel的小工具
通过SQL语句按条件,简单轻松保存到Excel(表列头同时导出)。 注意:此文件是日文。
sqlserver bcp导出到excel 测试可用
SQL表结构导出EXCEL
输入sql语句导出excel 代码参考
sqlserver导出excel文件出错解决方案 0x800A0E7A 0x80040154 sqlserver导出excel
C# 读取SQL数据导出到EXCEL相应工作薄
sql导入导出数据到Excel的详细步骤
VC++将SQLServer表导出到Excel 采用的是ADO技术
SQL导出EXCEL(带表头)的存储过程
sql语句导出excel,sql语句导出excel
将数据库中的表数据导出到Excel电子表格中。
sql导入导出excel、access工具
把Sql Server里的数据导出到Excel里面!
SQL2005导出Excel方法 以命令方式将数据库中的数据导出到excel中