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

文章介绍了一个使用XLSReadWriteII组件的函数,该函数能够根据DBGridEh的数据集生成EXCEL表格,支持多行标题、自定义行高、列宽、隐藏字段以及添加汇总行等功能。用户可以通过参数灵活配置,如显示零值、选择性显示数据、设置百分比格式等。
摘要由CSDN通过智能技术生成

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、添加统计汇总栏、尾部备注行、重复打印字段标题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值