在开发数据库应用程序中,经常要将类型相同的数据导出来,放到Excel文件中,利用Excel强大的编辑功能,对数据作进一步的加工处理。这有许多的方法,我们可以使用OLE技术,在Delphi中创建一个自动化对象,通过该对象来传送数据。 也可以使用ADO,通过与Excel数据存储建立连接,使用ADO这种独立于数据库后端的技术来导出数据集的数据。
可这两种技术都有一个共同的缺点,那就是慢,数据量少还好,用户不会有太多的感觉,可一旦数据量大,比如,超过1千条,速度就让人难以忍受了,那么有没有更好的办法,既可以快速地导出数据,又不用安装附加的软件。也许好多人都想到了剪贴板的方式,这种方式速度是快,可也有不好的一面,那就是数据量大占用内存也大,并且在Excel中调用PASTE方法时,需要锁定输入,这使用起来,就有点不方便了
这里我为大家介始一种比较好的方法,使用文件流的方式,通过TfileStream直接写入Excel文件。我写了一个函数,通过它可将数据集中的数据直接导入到Excel文件中。我测试了一下,1M的数据,不到十秒就完成了。附源程序。
首先在你的程序中定义以下几个数组:
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;
以上程序,在DELPHI6中通过测试!
分享到:
相关推荐
本教程将探讨如何使用Delphi编程将数据库中的数据高效地导入到Excel中。 首先,我们需要了解Delphi与数据库交互的基本概念。Delphi通过ADO(ActiveX Data Objects)组件库提供对各种数据库的支持,如Oracle、SQL ...
标题中的"DELPHI 从EXCEL导入到数据库"是一个关于使用Delphi编程语言将Excel电子表格中的数据导入到数据库的应用实例。这个话题涉及到多个IT领域的知识点,包括Delphi编程、Excel文件处理以及数据库交互。 Delphi是...
在Delphi编程环境中,将Excel数据导入到数据库是一项常见的任务,尤其在数据处理和报表生成时。本篇文章将深入探讨如何使用Delphi的COM对象(Component Object Model)接口与Microsoft Excel进行交互,并将数据顺利...
在Delphi编程环境中,从Excel导入数据是一项常见的需求,尤其在数据分析、报表处理或数据库集成等场景下。本文将详细探讨如何实现这个功能,并提供一个通用的方法。 首先,要完成这个任务,我们需要一个能与Excel...
综上所述,这个项目涉及到了Delphi与Access数据库的交互,可能包括数据的查询、编辑、保存等操作,同时结合了Excel的功能,将数据导出到电子表格中,便于进一步的数据分析和报告生成。开发人员利用Delphi的强大功能...
本教程将详细介绍如何使用Delphi编程环境将Excel数据有效地导入到Access数据库中。Delphi是一款强大的Object Pascal集成开发环境(IDE),而Excel和Access则分别是Microsoft Office套件中的电子表格和数据库管理工具...
本篇文章将深入探讨如何使用Delphi编程环境,将Excel数据高效地导入到MySQL数据库中,并独立创建数据库。 首先,我们需要理解Excel的数据结构。Excel文件(.xls或.xlsx)本质上是二维表格,包含行、列和单元格,...
在导入Excel数据时,首先需要通过ComOBJ来创建Excel应用程序对象,然后可以打开并读取Excel工作簿。 2. **Excel OLE自动化**:OLE自动化是一种技术,允许程序间共享数据和功能。在Delphi中,通过创建并操作Excel...
4. 数据导入导出:可以从其他数据库格式(如CSV、Excel)导入数据,也可以将SQLite数据库导出为这些格式。 5. 权限管理:对数据库的读写权限进行控制,保护数据安全。 6. 错误日志:记录操作过程中的错误信息,便于...
标题 "Delphi 7数据库内容导出至Excel表格源码" 涉及到的是一个在 Delphi 7 开发环境中实现的程序,该程序能够从SQL Server 2000数据库中读取数据并将其导出到Excel电子表格中。这个功能在数据管理和分析工作中极其...
在Delphi编程环境中,将Excel数据导入到Access数据库是一项常见的任务,这有助于数据的整合与管理。本篇文章将详细介绍如何使用Delphi实现这一过程。 首先,我们需要了解涉及到的关键技术组件。Delphi自身并不直接...
本教程将详细介绍如何使用Delphi编程环境将Excel数据导入到SQL数据库中。Delphi是一个强大的Windows应用程序开发工具,它支持使用Object Pascal语言,而Excel数据的导入则涉及到文件I/O和数据处理。SQL数据库,如...
本篇文章将详细探讨如何使用Delphi编程环境实现Excel数据导入到Firebird数据库的过程。Firebird是一种开源的关系型数据库管理系统,它以其高效、稳定和安全性著称,而Delphi则是一个强大的RAD(快速应用开发)工具,...
接下来,导入Excel数据的关键在于解析和转换Excel文件。在Delphi中,可以使用Jedi VCL或DevExpress等第三方库来读取Excel文件。这些库提供了API,可以访问工作簿、工作表、行和列,从而获取数据。在导入过程中,通常...
在IT行业中,Delphi是一种...这个过程需要对Delphi编程、数据库操作以及Excel文件格式有一定了解,但通过以上介绍的工具和方法,可以大大简化这个过程,提高开发效率。在实际项目中,可以根据需求选择最适合的方案。
本篇文章将详细探讨如何使用Delphi编程环境将Excel数据导入到SQL Server 2000数据库中。Delphi是一款强大的RAD(快速应用开发)工具,它提供了丰富的组件和库,使得开发者能够方便地与各种数据库进行交互。在本场景...
本教程将详细介绍如何使用Delphi编程环境将Excel数据导入到SQL数据库,特别是在繁体中文环境下操作的方法。Delphi是一款强大的RAD(快速应用开发)工具,它提供了丰富的组件和API,使得与各种数据库进行交互变得简单...
标题 "Excel数据导入SQL Server 2000: for Delphi 7" 涉及的是在Delphi 7开发环境中将Excel数据批量导入到SQL Server 2000数据库的过程。这个操作在数据处理和分析中非常常见,特别是在需要整合不同来源的数据时。...
本教程将针对初学者,详细介绍如何使用Delphi编程语言将Excel数据导入到Access数据库中。Delphi是一款强大的RAD(快速应用开发)工具,它支持与多种数据库系统交互,包括Microsoft Access。Excel作为广泛使用的电子...
本文将深入探讨如何使用Delphi这一强大的开发工具,实现从Excel文件中导入数据到SQL Server数据库的过程。Delphi作为一种高效的编程语言,提供了丰富的库和组件,使得这种数据迁移变得相对简单而高效。 ### Delphi...