利用剪贴板实现高速导出数据到Excel

原创 2003年09月28日 00:27:00

    在很多的时候,我们需要将我们的数据导出到Excel中进行加工,在Access中有现成的工具可以实现
可是在Delphi中却偏偏没有,无论如何我们需要这么一个工具,那么,事不宜迟,细细一想,最好的方法莫过
于直接在程序中按照Excel的格式生成Excel文件,使用Ole技术直接调用Excel实例,由于第一种方法技术实现
过于复杂,好在一般的计算机上已经安装了Office,在此就第二种方法“抛一块砖”。
    在此做一个示例以方便说明,我们考虑到导出数据有很多的情况是Master/Detail数据,因此就用两个
TQuery和一个TDataSource,如果有更多的层次,只需要增加TQuery和TDataSource即可,以下使用了两个TQuery
,分别是:qryMaster和qryDetail,一个TDataSource:dsSource;
    步骤是:
                1.建立一个Excel实例
                2.创建一个工作表
                3.创建一个TStringList,用来装数据
                4.穷举数据表,将数据存入TStringList
                5.将TStringList的数据复制到剪贴板
                6.把剪贴板中的数据粘贴到Excel
     本方法的优点在于:比逐条写入到Excel中的速度大大提高,我曾试过,在P3933,256M的机器上用普通
的方法,导出1000条数据大约需要2分钟,而该用本方法后只需要8秒。

function ToExcel():boolean;
var
    y       :integer;
    tsList  :TStringList;
    s       :string;
    aSheet  :Variant;
begin
    result:=true;
    Excel.Connect;                  // 打开Excel
    Excel.Visible[0]:=true;         // 显示Excel
    Excel.Workbooks.Add(xlWBATWorksheet,0);
    aSheet:=excel.Worksheets.Item[1];

    tsList:=TStringList.Create;
    try
        try
            with qryMaster do
            begin
                Open;
                First;
                While Not Eof do
                begin
                    s:='';
                    for y:=0 to FieldCount-1 do
                    begin
                        s:=s+Fields[y].AsString+#9;
                        Application.ProcessMessages;
                    end;
                    tsList.Add(s);
                    // 从表
                    if qryDetail<>nil then
                    begin
                        with qryDetail do
                        begin
                            Open;
                            First;
                            while Not Eof do
                            begin
                                s:='';
                                for y:=0 to FieldCount-1 do
                                begin
                                    s:=s+Fields[y].AsString+#9;
                                    Application.ProcessMessages;
                                end;
                                tsList.Add(s);
                                next;
                            end;
                        end;
                    end;
                    next;
                end;
                Close;
            end;
            Clipboard.AsText:=tsList.Text;
        except
            result:=false;
        end;
    finally
        tsList.Free;
    end;

    Excel.Disconnect;
    aSheet.Paste;
    MessageBox(Application.Handle,'数据导出完毕!','系统提示',MB_ICONINFORMATION or MB_OK);
end;

作者相关作品:
       ◢█████◤
      ◢◤   ◢◤
◣    ◢◤ 凌 ◢◤
█◣  ◢◤   ◢◤
█◥◣◢◤ 丽 ◢◤
█ ◥◤   ◢◤
█   软 ◢◤ http://wosens.com
█    ◢◤
█ 件 ◢◤  ◥█████
█  ◢◤    ◥◣  █
███◤      ◥███

======== 小燕子娱乐系列 ========
《小燕子信使》
《小燕子字符画》
《小燕子方块》

======== 程序员工具箱系列 ========
《内存清洁机》
《酷查询:CoolQuery》
《口令王:PasswordKing》
《凌丽邮件群发》
《SQL 数据库生成器》
《网页搅拌机》
《WinRoute日志分析》
《日记随手写》

======== 无敌商务系列 ========
《无敌信使群发》
《无敌图像印章》

快速导出数据到Excel(一):利用剪贴板

  将数据导出到Excel的方法有多种,速度有快慢之分,我用过三种方法,速度都比较快,下面的一种是通过剪贴板进行,不过在个别W2K以上的系统,由于字符集编码不同,中文内容导出到Excel后可能变成乱码...
  • nhconch
  • nhconch
  • 2005年03月04日 16:33
  • 3147

Java实现数据库数据导出到Excel中并下载到浏览器本地

首先必不可少的在pom.xml文件中导入关于poi的jar包: org.apache.poi poi 3.9 org.apache.poi poi-e...
  • qq_32686071
  • qq_32686071
  • 2016年11月30日 11:43
  • 352

java中使用poi导出数据到EXCEL模板中。

package business.component.check.controller; import accel.common.core.spring.util.ResourceUtils; imp...
  • chen_hai_long
  • chen_hai_long
  • 2017年07月27日 18:48
  • 435

PHP导出数据到Excel

PHP导出数据到Excel在Web开发中经常需要将一些数据导入到Excel表格中,比如需要导出符合条件的用户数据,导出项包括姓名、性别、身份证号、联系方式等等。那么问题来了,在导出的数据中如果出现比较...
  • u012162220
  • u012162220
  • 2015年03月21日 20:57
  • 809

Java中导出数据到Excel处理方法

在开发中我们经常遇到把数据导出到Excel中的需求,这里简单的描述下个人实现方式,提供了Excel2003 与Excel2007两种实现方式。实现如下:   1、接口类demo: packag...
  • baijianjun123456
  • baijianjun123456
  • 2016年04月01日 11:01
  • 2827

java 导出数据到指定的excel模板中。

为什么这样写呢,因为这样写方便修改,不会出太多的乱子!直奔主题: 使用的JXL包 结果: EXCEL样式: 页面样式: 网页页面链接: location.href = "phy...
  • dawnsun2013
  • dawnsun2013
  • 2013年12月16日 17:41
  • 2833

操作 POI 从数据库导出数据到excel表格

这里先将要导出的数据封装到对象容器list中,得到usersif (users.size() > 0) { // 创建Excel的工作书册 Workbook,对应到一个exce...
  • xiarinanfeng123
  • xiarinanfeng123
  • 2017年01月18日 19:13
  • 892

asp.net导出数据到Excel的几种方法(3/3)

继续前篇,第三种方法是利用OELDB数据访问对象操作Excel文件,达到将数据导出到Excel的目的,这种方法可能用的人不太多,缺点是必须有一个存在的Excel文件。优点是服务器不需要安装Excel,...
  • cpp2017
  • cpp2017
  • 2008年04月02日 16:28
  • 6231

VC++程序导出数据到EXCEL

VC程序导出数据到EXCEL   VC导出数据到EXCEL 收藏 我们制作应用软件的时候,经常要把结果以报表的形式输出,当前使用较为广泛的当然是Excel表格,本文简略介绍在VC++...
  • bbdxf
  • bbdxf
  • 2013年04月02日 20:17
  • 3843

利用PHPExcel导出数据到excel

项目中有个情景是,导出学生的成绩列表为excel格式的,在网上查了下,发现用PHPExcel的很多,于是下了个,看了下文档,调了出了来。 这里记录下,用的是thinkphp的,先把PHPEx...
  • molaifeng
  • molaifeng
  • 2013年10月09日 22:59
  • 31732
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用剪贴板实现高速导出数据到Excel
举报原因:
原因补充:

(最多只允许输入30个字)