`
宋科明
  • 浏览: 99758 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

快速导出数据到Excel(三):利用Excel内置功能

阅读更多

将数据导出到Excel的方法有多种,速度有快慢之分,我用过三种方法,速度都比较快,下面的一种利用Excel内置的功能,是三种之中最快的。其中最主要的是下面两句:
    xlQuery := xlSheet.QueryTables.Add(ADOQExport.Recordset ,xlSheet.Range['A3']);
    xlQuery.Refresh;
  不过我这里稍为复杂一点,要通过某种条件完成分类汇总。

function ExportToExcel: Boolean;
var
  xlApp, xlBook, xlSheet, xlQuery: Variant;
  SQLCmd: String;
  i, iNextRow: Integer;

  //设定单元格默认格式
  procedure ExcelSetDefaultFormat;
  begin
    xlSheet.Cells.Font.Name := '宋体';
    xlSheet.Cells.Font.Size := 12;
    xlSheet.Cells.VerticalAlignment := 2;
    //xlSheet.Cells.RowHeight := 17.25;
    xlSheet.Range['C:D'].HorizontalAlignment := xlCenter;
  end;

  //输出标题
  procedure ExcelSetHeader;
  begin
    xlSheet.Range['A1'].Value := '显示在报表第一行的标题';
    xlSheet.Range['A1:F1'].HorizontalAlignment := 7;
    xlSheet.Range['1:1'].Font.Size := 18;
    xlSheet.Range['1:1'].Font.Bold := true;
    xlSheet.Range['A2'].Value := '文件编号:WL/B 19';
    xlSheet.Range['A2'].Font.Size := 11;
    xlSheet.Range['F2'].Value := '记录编号:GZ-023';
    xlSheet.Range['F2'].HorizontalAlignment := xlRight;
    xlSheet.Range['F2'].Font.Size := 11;
    xlSheet.Range['A3'].Value := 'XXXXX有限公司';
    xlSheet.Range['F3'].Value := '日期:2005-X-X' ;
    xlSheet.Range['F3'].HorizontalAlignment := xlRight;
    //输出字段名
    ADOQExport.SQL.Strings[4] := 'where 1=0';
    if ADOQExport.Active then ADOQExport.Requery else ADOQExport.Open;
    xlQuery := xlSheet.QueryTables.Add(ADOQExport.Recordset ,xlSheet.Range['A4']);
    xlQuery.FieldNames := true;
    xlQuery.RowNumbers := False;
    xlQuery.FillAdjacentFormulas := False;
    xlQuery.PreserveFormatting := True;
    xlQuery.RefreshOnFileOpen := False;
    xlQuery.BackgroundQuery := True;
    xlQuery.RefreshStyle := xlOverwriteCells;   //xlInsertDeleteCells;
    xlQuery.SavePassword := True;
    xlQuery.SaveData := True;
    xlQuery.AdjustColumnWidth := True;
    xlQuery.RefreshPeriod := 0;
    xlQuery.PreserveColumnInfo := True;
    xlQuery.Refresh;
    iNextRow := 5;
  end;

  //设置页脚
  procedure ExcelSetFooter;
  begin
    xlSheet.PageSetup.LeftFooter := '制表:' + DM.UserInfo.UserName;
    xlSheet.PageSetup.CenterFooter := '审核:';
    xlSheet.PageSetup.RightFooter := '第 &P 页,共 &N 页';
  end;

  //输出汇总数据
  procedure ExcelSetSum;
  begin
    xlSheet.Range[Format('A%d', [iNextRow])].Value := '条数合计(条)';
    xlSheet.Range[Format('A%d:B%0:d', [iNextRow])].HorizontalAlignment := 7;
    xlSheet.Range[Format('C%d', [iNextRow])].Value := FloatToStr(DBGridEh1.Columns[6].Footer.SumValue);
    xlSheet.Range[Format('C%d:F%0:d', [iNextRow])].HorizontalAlignment := 7;
    xlSheet.Range[Format('A%d:F%0:d', [iNextRow])].Font.Bold := true;
    Inc(iNextRow);
    xlSheet.Range[Format('A%d', [iNextRow])].Value := '重量合计(kg)';
    xlSheet.Range[Format('A%d:B%0:d', [iNextRow])].HorizontalAlignment := 7;
    xlSheet.Range[Format('C%d', [iNextRow])].Value := FloatToStr(DBGridEh1.Columns[7].Footer.SumValue);
    xlSheet.Range[Format('C%d:F%0:d', [iNextRow])].HorizontalAlignment := 7;
    xlSheet.Range[Format('A%d:F%0:d', [iNextRow])].Font.Bold := true;
  end;

  //根据类别输出数据到Excel
  procedure ExportData(DataType: Byte);
  begin
      SQLCmd := Format('where DataType=%d ', [DataType]);
      ADOQExport.SQL.Strings[4] := SQLCmd;
      if ADOQExport.Active then ADOQExport.Requery else ADOQExport.Open;
      ProgressBar1.StepIt;

      if not ADOQExport.IsEmpty then begin
        //标题
        xlSheet.Range[Format('A%d', [iNextRow])].Value := DM.GetDataTypeStr(DataType);//将DataType转换为相应的文字显示
        xlSheet.Range[Format('A%d:F%0:d', [iNextRow])].HorizontalAlignment := 7;
        xlSheet.Range[Format('A%d:F%0:d', [iNextRow])].Font.Bold := true;
        Inc(iNextRow);

        xlQuery := xlSheet.QueryTables.Add(ADOQExport.Recordset ,xlSheet.Range[Format('A%d', [iNextRow])]);
        xlQuery.FieldNames := false;
        xlQuery.Refresh;
        Inc(iNextRow, ADOQExport.RecordCount);
        xlSheet.Range[Format('A%d', [iNextRow])].Value := DM.GetDataTypeStr(DataType) + '合计(条)';
        xlSheet.Range[Format('A%d:B%0:d', [iNextRow])].HorizontalAlignment := 7;
        xlSheet.Range[Format('C%d', [iNextRow])].Value := Format('=SUM(C%d:C%d)', [iNextRow-ADOQExport.RecordCount, iNextRow-1]);
        xlSheet.Range[Format('D%d', [iNextRow])].Value := Format('=SUM(D%d:D%d)', [iNextRow-ADOQExport.RecordCount, iNextRow-1]);
        xlSheet.Range[Format('A%d:F%0:d', [iNextRow])].Font.Bold := true;
        Inc(iNextRow);
      end;
      ProgressBar1.StepIt;
  end;

begin
    Result := true;
    ShowProgress(0, cbbDataType.KeyItems.Count*2+2, 0); //调用前面例子中的函数显示进度面板
    Screen.Cursor := crHourGlass;
    try try
        //建立OLE对象
        xlApp := CreateOleObject('Excel.Application');
        xlBook := xlApp.Workbooks.Add;
        xlSheet := xlBook.Worksheets['sheet1'];
        xlApp.Visible := false;
        ProgressBar1.StepIt;
        //设置格式
        ExcelSetDefaultFormat;
        //输出标题内容
        ExcelSetHeader;
        ProgressBar1.StepIt;

        //查询结果,导到EXCEL
        for i:=0 to cbbDataType.KeyItems.Count-1 do  //cbbDataType: TDBComboBoxEh
            ExportData(StrToInt(cbbDataType.KeyItems.Strings[i]));
        //输出汇总内容
        ExcelSetSum;
        //设置边框
        xlSheet.Range[Format('A4:F%d', [iNextRow])].Borders.LineStyle := xlContinuous;
        xlSheet.Cells.EntireColumn.AutoFit;
        //输出页脚
        ExcelSetFooter;
    except
        if not VarIsNull(xlApp) then
        begin
            xlApp.Quit;
            xlApp.Disconnect;
            xlApp := Unassigned;
            xlApp := NULL;
        end;
        result := false;
        Exit;
    end;
    finally
        pnlShadow.Visible := false;
        pnlProgress.Visible := false;
        Screen.Cursor := crDefault;
        xlSheet := Unassigned;
        xlBook := Unassigned;
        if not VarIsNull(xlApp) then begin
            xlApp.Visible := true;
            xlApp := Unassigned;
        end;
        if ADOQExport.Active then ADOQExport.Close;
    end;
end;

 

分享到:
评论

相关推荐

    excel导出 内置导出代码,

    excel类库 内置一个text 文本是导出代码, 做相应的调整就可以用了, 加载文件方法是tp5的 做你框架 或者原生的调整就可以了,

    JAVA实现excel的导出.zip

    用Java语言采用接口设计模式、代理设计模式、工厂设计模式实现对excel中的表实现基本的导出(写)功能,把一个对象集合输出到一个excel表中。 【基本功能】 将对象集合导出到Excel表 【扩展功能】 1、自由设置表头 2...

    php excel导入导出,php导入mysql,mysql 数据导出为excel

    本项目包含一个带样式的小实例,页面可以直接导入数据,导入的数据存入mysql数据库,也可以导出excel,导出excel文件位于downloads目录下, 需要将较长的样本数据从 Excel 文件导入到 MYSQL 数据库,此项目包含一个 ...

    php编写的excel2007文件快速导出程序

    本程序适用于linux下使用php5快速大量的导出数据到excel2007格式文件,在x86的linux环境下测试导出60000条记录大约需要17秒,占用内存小,且导出速度和记录数基本呈线性同步增长。 phpexcel是功能相当强大的模块,但...

    Java生成excel表格设置公式并填充数据

    PageOffice除了提供Word/Excel动态数据填充,格式控制,Word/Excel用户输入提交,Word/Excel/PowerPoint/WPS等Office文档的在线打开、只读浏览、编辑、保存等功能外,还给在线协同办公内置了强大的支持功能:可编辑...

    导出Excel的C#实现帮助类

    2. 数据分析和图表:Excel具有各种内置的数据分析工具,如排序、筛选、查找、条件格式化等,可以快速统计和分析数据。此外,Excel还支持创建各种类型的图表,如折线图、柱状图、饼图等,可帮助用户更直观地呈现和...

    easyexcel+validation excel导入导出下载

    使用esayexcel作为excel导入导出工具代码 validation 作为excel内容校验 可运行,内置模板文件

    一款纯前端写的类似Excel的在线表格源码.zip

    增强功能:数据透视表,图表,评论,共享编辑,插入图片,矩阵计算,截图,复制到其他格式,EXCEL导入及导出等 一款纯前端类似excel的在线表格,功能强大、配置简单、完整源码。 特性 格式设置:样式,条件格式,...

    Excel百宝箱8.0

    【生成系统图标】【获取内置命令】【修复Excel】【破解VBA密码】【删除空单元格】【转置选区】【按列倒置】【按列倒置】【字母大小写转换】【小写金额转大写】【大写金额转小写】【区域数据加密】【多区域复制】【按...

    delphi操作excel模块,图片,表格,读写删除

    不需Excel也可讀寫xls檔的Delphi控件 用来读取Excel,Access的控件 读写任何单元值 数字型、字符型、布尔型以及错误型。但是你了解日期和时间型单元吗?在Excel中没有这样的单元。Excel是和Delphi一样的方式来存储...

    jQuery MiniUI 2.1.5 官方版本,作个保留

    •超强表格:提供锁定列、多表头、分页排序、行过滤、数据汇总、单元格编辑、详细行、Excel导出等功能。 •第三方兼容:与ExtJS、jQuery、YUI、Dojo等任意第三方控件无缝集成。 •浏览器兼容:支持IE6+、FireFox、...

    Excel 联系人 v2.7.6.1

    Excel联系人提供了一种导出及导入通讯录的最佳方式,让你能轻松操控你的手机中最有价值的数据。 软件特点: 1. 你可以使用Microsoft Excel、OpenOffice.org或其他Excel软件编辑手机通讯录。 2. Excel联系人将你...

    Excel百宝箱 9.0 破解版 批量导入图片等200种功能

    【修复Excel】当您的Excel某些功能无法使用时,或者无缘无故多出很多菜单、工具栏时,本工具可以瞬间恢复Excel到默认状态 【破解VBA密码】将有密码的VBA代码破解,直接打开即可修改代码。包括工程不可查看类的破解 ...

    神通数据库-数据库快速入门.pdf

    该项功能不仅使数据更易于访问,而且可以利用它限制某些用户能够查看或更新的行和列。视图可以有 效地减少数据库中的数据冗余,并为实现灵活的数据安全机制提供了基础。 • 支持存储过程 使用数据库创建应用程序时,...

    Java语言实现Excel的导出

    使用Java内置的poi jar包实现excel的操作,使用工厂模式、DAO设计模式等,思想很简单,可供设计模式参考,包括代码

    MyExcel多功能Excel工具包-其他

    MyExcel是一个集导入、导出、加密Excel等多项功能的工具包。 优点: 可生成任意复杂表格:本工具使用迭代单元格方式进行excel绘制,可生成任意复杂度excel,自适应宽度、高度; 零学习成本:使用html作为模板,学习...

    EXCEL万能百宝箱 V29.8 内置了图片百宝箱、财务百宝箱、函数百宝箱、二维码百宝箱.rar

    原创批量图片排序功能,誉为“图片排序大师”,有21种样式可选,能批量将工作表中指定存储格范围的图片快速排序并输出到新表中。支持XP至WIN10多个操作系统完美兼容,实现无缝隙对接,U盘版用户除了在原有可换机使用...

    NPOI MVC导出Excel

    使用NPOI完成Excel导出,内置详细代码,很容易就能够应用....................

    EXCEL万能百宝箱64位 V29.0珍藏版—智慧轻巧办公,批量打印二维码条形码,十倍提效率,一码三用,480个功能.rar

    原创批量图片排序功能,誉为“图片排序大师”,有21种样式可选,能批量将工作表中指定存储格范围的图片快速排序并输出到新表中。支持XP至WIN10多个操作系统完美兼容,实现无缝隙对接,U盘版用户除了在原有可换机使用...

    EXCEL集成工具箱V6.0

    【查找与替换】 增强型EXCEL内置查找与替换功能。可以按设置搜索任何字符串(包括*或?符以及公式中包含的某字符),也可以将搜索结果写入到一新的工作表中以备查。 【工具箱选项】 集成工具箱的基本选项设置。基本...

Global site tag (gtag.js) - Google Analytics