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