1. 功能预览

运行预览


模板样式


存储返参


导出的Excel

2. 代码实现

//执行sql的函数
procedure TForm1.GetReportData(astrsql:string);
varstrSQL,err:string;                              i:integer;
beginstrSQL :='set QUOTED_IDENTIFIER off   '+astrsql;//strSQL := astrsql  ;//查询  可支持多个结果集的返回DM.qryReport.Active:=False;DM.qryReport.Close;DM.qryReport.SQL.Clear;DM.qryReport.SQL.Add(strSQL);tryDM.qryReport.Open;except on E: Exception dobeginshowmessage('执行SQL'+strsql+'异常!'+E.Message);Exit;end;end;
end;
//获取桌面的路径
function TForm1.GetShellFolders(strDir: string): string;
constregPath = '\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders';
varReg: TRegistry;strFolders: string;
beginReg := TRegistry.Create;tryReg.RootKey := HKEY_CURRENT_USER;if Reg.OpenKey(regPath, false) thenbeginstrFolders := Reg.ReadString(strDir);end;finallyReg.Free;end;result := strFolders;
end;
//文件导出按钮的事件
procedure TForm1.btn1Click(Sender: TObject);
varexcel,sheet :variant;iValidRows: Integer; // 工作表的有效行iValidCols: Integer; // 工作表的有效列i,j,k,affect:integer;strTemp,FieldName,reportname : string;//FieldName:对应数据的FieldName,isList,isReadRowCol,isListLine :boolean;//isList:是否包含list,isReadRowCol:是否已经读取到了list开始的行号和列号,isListLine:本行是不是包含ListlistColBegin,listColEnd:integer;//list的开始列号和结束列号aAdoDataSetMaster,aAdoDataSetList :TADODataSet;
beginGetReportData(trim(cbb2.Text));aAdoDataSetMaster :=TADODataSet.Create(Self);aAdoDataSetList:=TADODataSet.Create(Self);aAdoDataSetMaster.Recordset :=DM.qryReport.Recordset; //master数据集aAdoDataSetList.Recordset:=DM.qryReport.NextRecordset(affect);//list数据集excel := createoleobject('Excel.Application');excel.WorkBooks.open(trim(cbb1.Text));trysheet := excel.Application.ActiveSheet;//.WorkSheets['sheet1'];iValidRows := sheet.UsedRange.Rows.Count;    // 有效行数iValidCols := sheet.UsedRange.Columns.Count; // 有效列数//ShowMessage(IntToStr(iValidRows) + ', ' + IntToStr(iValidCols));listColEnd := 0;isReadRowCol := false;if aAdoDataSetList.recordcount>0 then //list数据集有数据beginisList := trueendelseisList := false;if isList thenbeginfor i := 1 to iValidRows dobeginfor j := 1 to iValidCols dobegin// 读工作表单元格strTemp := trim(sheet.Cells.Item[i, j]);if pos('(<list>)',strTemp)=0 then continue;if pos('(<list>)',strTemp)>0 thenbeginif listColBegin=0 then listColBegin := j;listColEnd := j;isReadRowCol := true;end;end;if isReadRowCol thenbeginfor k:=1 to aAdoDataSetList.recordcount-1 dobeginexcel.ActiveSheet.Rows[i+1].Insert;for j := listColBegin to listColEnd dobeginstrTemp := trim(sheet.Cells.Item[i, j]);sheet.Cells.Item[i+1, j]:=strTemp;endend;break;//只要找到一个就行了end;end;end;iValidRows := sheet.UsedRange.Rows.Count;    // 有效行数iValidCols := sheet.UsedRange.Columns.Count; // 有效列数//ShowMessage(IntToStr(iValidRows) + ', ' + IntToStr(iValidCols));aAdoDataSetMaster.first;aAdoDataSetList.first;for i := 1 to iValidRows dobeginisListLine := false;for j := 1 to iValidCols dobegin// 读工作表单元格strTemp := trim(sheet.Cells.Item[i, j]);if (pos('(<field>)',strTemp)=0) and (pos('(<list>)',strTemp)=0) then continue;if pos('(<field>)',strTemp)>0 thenbeginFieldName := copy(strTemp,pos('(<field>)',strTemp)+length('(<field>)'),pos('(</field>)',strTemp)-pos('(<field>)',strTemp)-length('(<field>)'));strTemp := stringreplace(strTemp,strTemp,aAdoDataSetMaster.FieldByName(FieldName).AsString,[rfReplaceAll]);sheet.Cells.Item[i, j] := strTemp;endelse if pos('(<list>)',strTemp)>0 thenbeginFieldName := copy(strTemp,pos('(<list>)',strTemp)+length('(<list>)'),pos('(</list>)',strTemp)-pos('(<list>)',strTemp)-length('(<list>)'));strTemp := stringreplace(strTemp,strTemp,aAdoDataSetList.FieldByName(FieldName).AsString,[rfReplaceAll]);sheet.Cells.Item[i, j] := strTemp;isListLine := true;end;end;if isListLine then aAdoDataSetList.Next;end;reportname:=GetShellFolders('Desktop')+'\外挂报表-Excel导出数据.xlsx';sheet.SaveAs(reportname);//excel.ActiveWorkBook.SaveAs('g:\aa.xls');finallyexcel.Quit;sheet := Unassigned;excel := Unassigned;end;showmessage('导出完成:'+reportname);
end;

Delphi实现带有格式的Excel导出功能相关推荐

  1. 简便的Excel导出功能

    Excel导出功能 在我们开发项目的时候,难免会遇到客户需要将表格数据导出到Excel中,进行打印或者留存,于是Java对Excel.word的操作都必不可少. 关于这些操作Excel目前有两个框架, ...

  2. 如何在 Asp.Net Core 实现 Excel 导出功能

    在web应用程序开发时,或许你会遇到这样的需求,如何在 Asp.Net Core 中实现 excel 或者 word 的导入导出,在 NuGet 上有大量的工具包可以实现这样的功能,本篇就讨论下如何使 ...

  3. python列表导出_python list格式数据excel导出方法

    如下所示: # _*_ coding:utf-8 _*_ #----------------------------------------------- # import modules #---- ...

  4. 根据children动态复杂表头excel导出_Java高级特性-注解:注解实现Excel导出功能

    注解是 Java 的一个高级特性,Spring 更是以注解为基础,发展出一套"注解驱动编程". 这听起来高大上,但毕竟是框架的事,我们也能用好注解吗? 的确,我们很少有机会自己写注 ...

  5. java数据导出ex_Java高级特性注解:注解实现Excel导出功能

    作者:JerryWu来源:SegmentFault 思否社区 注解是 Java 的一个高级特性,Spring 更是以注解为基础,发展出一套"注解驱动编程". 这听起来高大上,但毕竟 ...

  6. Angular导出功能(excel导出功能、文件数据流导出功能、图片的下载导出功能)

    Angular导出功能(excel导出功能.文件数据流导出功能.图片的下载导出功能) 场景1:(直接返回网络地址进行导出的excel) 后台返回的是 : "http://192.168.0. ...

  7. java Excel导出功能之 不固定列表格

    背景:考勤周期为本月19号至上月20号,则每个月考勤周期表的列是动态变化的.所有数据显示和excel导出功能都需要动态的进行处理. 显示格式如下图 前端 checkin.jsp<%@ page ...

  8. Excel导出功能超时解决方案 -- 异步处理

    Excel导出功能超时解决方案 -- 异步处理 参考文章: (1)Excel导出功能超时解决方案 -- 异步处理 (2)https://www.cnblogs.com/nightOfStreet/p/ ...

  9. easypoi 实现任意格式的Excel导出(基于模板实现)

    easypoi 实现任意格式的Excel导出 easypoi普通导出我就不说了,用他自带的注解就可以实现 1. easypoi模板导出效果图 2.模板格式图 easypoi自定义模板可以支持任意复杂的 ...

最新文章

  1. vue 使用fs_模仿vue-cli,手写一个脚手架
  2. linux隐藏软件程序,如何使用GNOME Shell隐藏的屏幕录像工具
  3. ubuntu20.04运行愤怒的小鸟
  4. python 定义变量_用python解决动态的定义变量名(并给其赋值方法:大数据处理)...
  5. hibernate3连接mysql8报错_MySQL的8小时连接超时时间,导致系统过夜即崩溃,报错Could not roll back Hibernate transaction...
  6. android 获取mac地址
  7. 怎样学好python编程-怎样学习python编程?
  8. redis学习总结2
  9. 干支纪年法VB编程:输入一个年份,程序会列出从该年份开始的12年的干支纪年和生肖,希望大神帮我解释期中的关键语句
  10. Nginx - 原理机制
  11. 阿里云DataV基础平面地图使用笔记(2)
  12. matlab egarch,EGARCH模型参数的拟蒙特卡洛估计方法及其在股票指数上的应用
  13. 应用程序正常初始化(0xc0000034)失败
  14. 学生信息管理系统中系统登录问题
  15. RT-Thread使用DP83640 实现IEEE1588 协议笔记
  16. php 413,PHPCMS上传错误413?
  17. fastdfs和其他文件系统区别
  18. 生物医学数据统计分析-相关性分析
  19. 期末复习【计算机组成原理】
  20. 哪个计算机软件可以探究小孔成像,探究小孔成像的奥秘.doc

热门文章

  1. 随想录(ionic开发app)
  2. 计算机专业想从事考古,考古专业一月工资多少 是冷门专业吗
  3. Linux两个网卡mac地址重复,ARP响应Linux服务器上的单个MAC地址,同一网络上有多个接口...
  4. mysql source导入_读取MySQL数据库中的数据【Python数据分析百例连载】
  5. Python的DoS拒绝服务之TCP/SYN洪水攻击
  6. SaCa DataViz 企业版 | 高性能大数据分析引擎
  7. 【JS基础】异步和单线程
  8. 从 SQL Server 到 MySQL (三):愚公移山 - 开源力量
  9. 云存储之对象存储性价比小谈
  10. 在微信小程序中绘制图表(part3)