XLSReadWriteII 写了一个DBGrdiEh创建EXCEL表的函数

news2024/9/27 12:08:57

XLSReadWriteII 写了一个DBGrdiEh创建EXCEL表的函数

     自己通过XLSReadWriteII,写了一个由DBGridEh数据集,通过参数调用,创建EXCEL表格的函数,通过调用的参数设置,可以较为方便地,创建指定数据集的常用EXCEL表格。

     原函数默认表标题一条,自动行高,列依据字段(数据)长自动列宽。

     近期又升级了XLSReadWriteII,为该函数添加了一功能:

     新函数支持DBGridEh多行字段标题。(做到EXCEL与DBGridEh字段标题一致)

     可以设置三条表标题,尾部后缀一条备注行。通过数组传递,设置表标题、尾部后缀备注行高度、字段名称标题行的高度,各个数据列的宽度。

     可以指定隱藏(不显示)的字段。

     可以,添加最后一行汇总行(Sum列数据),并可以指定隱藏(不统计)的字段。

     可以对数据集,指定特定字段,依据该字段为True时,才能有效(收集该行数据)。否则,收集全体数据集。

     对数据的处理:money类型,保留2位小数,bit类型True显示为“√”。

     为了方便使用调用,特意写出参数的设置和调用方式。不过,还得进一步完善。

     一、函数的命名与参数设置

procedure XLS_DBGridEh_EXCEL_Title3_Select(                          // 通过XLS 生成Excel表
                             Sender:TComponent;
                             DBGrid:TDBGridEh;
                             Title_1,Title_2,Title_3,TailTag,FileName:string;
                             PageType,ShowZero,DoSum:integer;NoSum,NoCol:String;
                             percent,iFontSize:integer;sFontName:string;
                             SelectEnd:Boolean;
                             SelectField:string;
                             ColWith,RowHeight: array of integer;
                             DuplicateTitle:Boolean
                             );              

    相关参数说明如下:

    Sender:TComponent       调用窗口 使用Self
    DBGrid:TDBGridEh;        DBGridEh
    Title_1,                            表头标题1,空字串取消首标题     
    Title_2,                            表头标题2,空字串取消第二行标题   
    Title_3,                            表头标题3,空字串取消第三行标题   
    TailTag,                           表尾注释行,空字串取消表尾注释行 
    FileName:string;             EXCEL文件名(全路径文件名,97牌后缀.xls, 2007版.xlsx)  
    PageType,                      页面样式(0纵向,1横向)  
    ShowZero,                      是否显示Cell单元中的0,(0不显示,1显示)
    DoSum:integer;              是否在表的最后一行添加统计汇总栏(0不添加,1添加)
    NoSum,                          强制非汇总的列,格式:'字段1,字段2,字段3'
    NoCol:String;                  强制非显示的列,格式:'字段1,字段2,字段3'
    percent,                          显示百分比(1-100)   
    iFontSize:integer;           表Cell字体尺寸
    sFontName:string;         表Cell字体名
    SelectEnd:Boolean;       True仅显示SelectField字段的True的行,False显示全体
    SelectField:string;          指定选择的字段名
    ColWith,                         列宽度,数组[0-LastCol-1],指定列的宽度
    RowHeight: array of integer; 行高,数组[0-2],指定三个表头标题的高度,[3-4]指定字段项目行高度,当字段项目行仅有一行时,[4]无效。      
    DuplicateTitle:Boolean;  是否(第二页开始)重复打印字段项目行 

    二、实例

procedure TBBFrm.Button12Click(Sender: TObject);
var s1,S2,Date1,Title1,Title2,Title3,TailTag,FileName:string;
    ColWith : array[0..100] of integer;     // 列宽度
    RowHeight : array[0..4] of integer;     // 行标题高度
    i,iRow:Integer;
begin
  For i:=0 to 4 do RowHeight[i]:=400;         // 默认标题行高度   
  RowHeight[0]:=450;                          // 表标题第一行高度
  RowHeight[1]:=450;                          // 表标题第二行高度
  RowHeight[2]:=400;                          // 表标题第三行高度
  RowHeight[3]:=500;                          // 字段项目第一行高度
  RowHeight[4]:=1200;                         // 字段项目第二行高度
  DBGrid显示列,排除不显示的列
//   排序,床号,姓名,身份证号,护理等级,照护等级,入院日期,出院日期,诊断,手术史,过敏史,基线氧饱和度值,药物名,用法用量,
//   新增用药,接种针数,接种类型,检验报告,病历出院小结,转诊日期,末次新冠核酸阳性,末次新冠核酸阴性,饮食习惯,转诊原因,
//   护理生活情况
  For i:=0 to 100 do ColWith[i]:=1000;        // 默认列宽度    
  ColWith[0]:=1000;    // 排序
  ColWith[1]:=1800;    // 姓名
  ColWith[2]:=2000;    // 身份证号
  ColWith[3]:=3000;    // 诊断
  ColWith[4]:=2000;    // 手术史
  ColWith[5]:=2000;    // 过敏史
  ColWith[6]:=1100;    // 基线氧饱和度值
  ColWith[7]:=4600;    // 药物名
  ColWith[8]:=4400;    // 用法用量
  ColWith[9]:=1100;    // 新增用药
  ColWith[10]:=1100;   // 接种针数
  ColWith[11]:=1100;   // 接种类型
  ColWith[12]:=5000;   // 检验报告
  ColWith[13]:=1100;   // 病历出院小结
  ColWith[14]:=2400;   // 转诊日期
  ColWith[15]:=1800;   // 末次新冠核酸阳性
  ColWith[16]:=1800;   // 末次新冠核酸阴性
  ColWith[17]:=2000;   // 饮食习惯
  ColWith[18]:=1100;   // 转诊原因
  ColWith[19]:=Trunc(40*128.2);  // 护理生活    毫米*128.2

  S1:=sCombobox1.text;
  S2:=sCombobox2.text;
  Date1:=FormatdateTime('yyyy年M月d日',sDateEdit2_3.Date);
  FileName:=TablePath+UsesName+'_'+Date1+'_健康档案.xlsx';
  Title1:=S1+'养老机构住养老人转诊健康档案';
  Title2:='养老机构名称:'+UsesName+'      填报日期:'+Date1+'       审核人:'+S2;
  Title3:='';
  TailTag:='';
  XLS_DBGridEh_EXCEL_Title3_Select(
                     Self,           //Sender      主窗体
                     DBGridEh1,      //DBGrid DBGridEh
                     Title1,         //Title       标题
                     Title2,         //Title       标题
                     Title3,         //Title       标题
                     TailTag,        //TailTag     尾标注
                     FileName,       //FileName    生成文件名
                     1,              //Pagetype    页面样式(0纵向,1横向)
                     0,              //ShowZero    显示 0  (0不显示,1显示)
                     0,              //DoSum       底栏统计汇总(0不,1可)
                     '',             //NoSum       强制非汇总的列  格式:AAAA,BBBB,CCCC
                     '选择,床号,护理等级,照护等级,入院日期,出院日期,分支,ID',            // NoCol     强制非显示的列  同上
                     100,            //percent     显示百分比
                     9,              //FontSize    字体尺寸
                     '宋体',         //FontName    字体名
                     True,           //SelectEnd   选择有效
                     '选择',         //SelectField 选择字段名
                     ColWith,        //ColWith     列宽
                     RowHeight,      //RowHeight   行高(标题)
                     True            //DuplicateTitle  重复打印标题
                     );
  if ExcelPath='' then ExcelPath:='c:\program files\microsoft office\office11\Excel.exe';
  shellexecute(handle,'open',pchar(ExcelPath),pchar(FileName),nil,sw_shownormal);
end;

     三、效果

    1、DBGridEh

    2、EXCEL

    生成的EXCEL表与DBGridEh一致,还可以在最后一行添加统计汇总栏,指定不显示的列等等,通过参数设置,创建EXCEL比较随意。

    打印效果:

     通过一个函数,可以在窗口中,任意调用。实现各种打印效果。 

    3、    使用SelectField,SelectField 指定选择的字段,可以打印一行或多行

    4、添加统计汇总栏、尾部备注行、重复打印字段标题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/175439.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自动化和Selenium

作者:~小明学编程 文章专栏:测试开发 格言:热爱编程的,终将被编程所厚爱。 目录 什么是自动化,我们为什么需要自动化的测试? 为什么选择selenium来作为我们的web自动化测试的工具? 定位元素…

【C进阶】找单身狗

⭐博客主页:️CS semi主页 ⭐欢迎关注:点赞收藏留言 ⭐系列专栏:C语言进阶 ⭐代码仓库:C Advanced 家人们更新不易,你们的点赞和关注对我而言十分重要,友友们麻烦多多点赞+关注,你们…

Spring事务(事务的实现、隔离级别、传播机制)

目录 一、事务的定义和意义 二、事务的实现 1、MySQL事务的回顾 2、Spring声明式事务(利⽤注解⾃动开启和提交事务) 前置知识及概念 实例分析:事务的回滚 🔔特殊情况(无自动回滚) 🔔事务…

VueJs中如何使用provide与inject

前言在vue2.0里面provide与inject是以选项式(配置)API的方式在组件中进行使用的,解决的是跨组件(祖孙)间通信的一种方式也就是父子组件间的通信,父组件上通过自定义属性,而子组件间通过props这种方式接收,如果想要一层一层的传递,这种方式就会比较麻烦,不灵活provide与inject就…

Linux下的进程信号

目录 信号背景: 信号产生前 Core Dump 信号产生中 信号产生后 其他概念 不可重入函数 volatile关键字 SIGCHLD 17号信号 信号背景: 在生活中处处都存在的信号,比如信号灯,要想处理信号,我们就必须具备两种…

day26-XML/枚举/注解

1.xml 1.1概述【理解】 万维网联盟(W3C) 万维网联盟(W3C)创建于1994年,又称W3C理事会。1994年10月在麻省理工学院计算机科学实验室成立。 建立者: Tim Berners-Lee (蒂姆伯纳斯李)。 是Web技术领域最具权威和影响力的国际中立性技术标准机构。 到目前为…

AWS - IAM

AWS IAM 自用笔记。 Terms IAM - Identity and Access Management, a global service it gives: Centralized control of AWS accountShared access to AWS accountGranular permissionsIdentity Federation, i.e., Facebook, LinkedIn etc. it allows: Multi-Factor Authe…

20230121解决AIO-3568J开发板无法刷机以及串口异常的问题

20230121解决AIO-3568J开发板无法刷机以及串口异常的问题 2023/1/21 22:31 一片比较旧的AIO-3568J开发板,症状: 1、无法刷机&启动。【Loader模式 & MASKROM模式】 2、串口输出乱码! (一)刷机问题的解决&#x…

一起自学SLAM算法:7.3 估计理论

连载文章,长期更新,欢迎关注: 不管是用贝叶斯网络还是因子图,一旦SLAM问题用概率图模型得到表示后,接下来就是利用可观测量(和)推理不可观测量(和),也就是说S…

初识C语言(上)

写在前面 我们正式开始接触到C语言,这是我在学习过C语言后重新写的博客,我把之前的稍微优化了一下,希望能用更加朴素的语言和大家分享,我希望给大家带来一个可以看的懂,理论和实践并行的内容.当然里面也会存在一些错误和不恰当的地方,还请诸位指正. 为何学习C语言 我想从两个…

mac 疑难问题汇总

macos 更改zsh到bash查看当前系统有哪些bash命令行:cat /etc/shells切换成bash命令行:chsh -s /bin/bashmac触摸屏轻点设置Mac通过crontab设置定时任务报错Operation not permitted1、系统偏好设置->安全性和隐私->完全磁盘访问权限2、解除锁定允许…

【双向链表】java代码实现

前言: 大家好,我是良辰丫🍓🍓🍓,上一篇文章我和大家一起去探索了单链表的知识世界,今天我们去接触双向链表,什么?没听错,就是双向链表,比单链表更…

UE INI文件操作 INI File Operation [ Read / Write ] 插件说明

在 Windows 平台上的 INI 文件读写操作 1. Write INI String 输入: Directory: 选择保存目录 Project Directory : 当前项目目录Project Content Directory:当前项目 Content 目录Project Config Directory:当前项目…

JVM内存区域的划分

根据 JVM 规范,JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。 程序计数器(线程私有): 是当前线程所执行的字节码的行号指示器,每条线程都要有一个独立的程序计数器,这类内存也称为…

Java基础08:面向对象进阶(上)

Java基础08:面向对象进阶(上)一、static1. 静态变量2. 静态方法3. 工具类4. static注意事项5. 重新认识main方法二、继承1. 继承的概念2. 继承的特点3. 继承中访问成员变量4. 继承中访问成员方法(方法重写)5. 继承中访…

给大家准备了程序员专属红包封面,审核通过后我哭了,太心酸了(┬_┬)

大家好,我是小悟 今天就是除夕了,也就是大年三十,小伙伴们应该都回家了吧,小悟祝大家新年快乐,身体健康,万事如意,兔飞猛进哦。 春节临近,收到微信定制红包封面并送了四千个名额的…

【深度学习】详解 MoCo

目录 摘要 一、引言 二、相关工作 三、方法 3.1 Contrastive Learning as Dictionary Look-up 3.2 Momentum Contrast 3.3 Pretext Task 四、实验 4.1 Linear Classification Protocol 总结 ☆ 实现 参考资料 Title:Momentum Contrast for Unsupervised…

AlmaLinux 9 安装Kasm Workspaces

今天尝试一下AlmaLinux 9 安装Kasm Workspaces。 前提条件 安装了Docker和Docker Compose,已经最新版本要求, docker 18.06 docker compose 2.1.1 创建一个Swap分区 下面的步骤将创建一个2千兆字节(2048MB)的交换分区。请根据…

我的创作纪念日——“永远相信美好的事情即将发生”

作者:非妃是公主 专栏:《程序人生》 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 文章目录序与CSDN的往事机缘收获憧憬碎碎念序 第一次写创作纪念日的文章!哈哈哈哈,今…

一起自学SLAM算法:7.5 基于因子图的状态估计

连载文章,长期更新,欢迎关注: 虽然式(7-90)所示的完全SLAM系统可以用滤波方法求解,比如著名的Fast-SLAM实现框架。但是,贝叶斯网络表示下的完全SLAM系统能很方面地转换成因子图表示,…