一种基于文本文件的格式化电子表格生成方法与流程

文档序号:23992465发布日期:2021-02-20 13:55阅读:74来源:国知局
一种基于文本文件的格式化电子表格生成方法与流程

[0001]
本发明涉及生成电子表格技术领域,尤其涉及一种基于文本文件的格式化电子表格生成方法。


背景技术:

[0002]
在银行日常业务中,经常需要从数据库提取数据生成和打印报表、回单、发票等,通常要求对数据进行分类、汇总,生成特定排版样式、文本字体、数字格式等。现有常见做法有两种:一种是生成文本文件,以空格与空行来实现排版;另一种是做excel模板,将数据填入对应的单元格。前者生成速度快,但排版和数据处理困难,后者在进行大批量数据处理的时候则速度较慢。


技术实现要素:

[0003]
本发明的目的在于针对背景技术中的缺陷,提出一种基于文本文件的格式化电子表格生成方法。
[0004]
为达此目的,本发明采用以下技术方案:
[0005]
一种基于文本文件的格式化电子表格生成方法,包括如下步骤:
[0006]
制作格式模板;
[0007]
建立字典表,所述字典表的元素为单元格参数;
[0008]
建立二维数组,所述二维数组的数据元素为单元格参数的属性的记录类型数据;
[0009]
初始化二维数组,参照所述字典表,将单元格参数记录至所述二维数组;
[0010]
新建文本文件,将其后缀修改为excel可读格式,将格式模板写入文本文件;
[0011]
初始化二维数组中每个数组单元的content值,从数据库中读取数据,根据字典表的索引将所读取数据的值一一写入对应的数组单元的content值;
[0012]
将二维数组写入文本文件,生成电子表格。
[0013]
优选的,参照所述字典表,将格式模板参数记录至所述二维数组具体包括:
[0014]
电子表格中每个单元格对应二维数组中每个数组单元;
[0015]
若格式模板中存在合并行格式的多个单元格,则在从上往下方向,以第一个单元格所对应的数组单元作为起点,设置其rowspan属性,rowspan=m,以起点所在数组单元所对应的单元格向下执行合并m个单元格操作;
[0016]
若格式模板中存在合并列格式的多个单元格,则在从左往右方向,以第一个单元格所对应的数组单元作为起点,设置其colspan属性,colspan=n,以起点所在数组单元所对应的单元格向右执行合并n个单元格操作;
[0017]
所述rowspan属性表示规定单元格可横跨的行数;
[0018]
所述colspan属性表示规定单元格可横跨的列数。
[0019]
优选的,扫描二维数组,将设置了rowspan属性的数组单元,rowspan=m,m>1,以其作为起点,将起点向下的m-1个数组单元的rowspan属性均设置为0,即rowspan=0;
[0020]
扫描二维数组,将设置了colspan属性的数组单元,colspan=n,n>1,以其作为起点,将起点向右的n-1个数组单元的colspan属性均设置为0,即colspan=0。
[0021]
优选的,二维数组中,同时设置colspan=n和rowspan=m的数组单元,m>1,n>1,m值和n值必须相同,具体的:
[0022]
判断二维数组中数组单元是否设置了rowspan=m,m>1,若是,则接着判断该数组单元是否设置了colspan=n,n>1,若否,则执行合并m行操作;
[0023]
若该数组单元同时设置了colspan=n,n>1,则接着判断m值是否等于n值,若m=n,则同时执行合并m行和n列操作;
[0024]
若m≠n,则选取m值和n值之间的较大值,执行合并操作。
[0025]
优选的,所述字典表的元素包括字段名、行、列、单元格样式、对齐方式、行合并数和列合并数,以所述字段名为索引。
[0026]
优选的,制作格式模板包括预设电子表格的行高和列宽。
[0027]
优选的,新建文本文件包括:
[0028]
使用自定义单元格通用格式和特殊数字格式创建文件头;
[0029]
创建表格头;
[0030]
将预设的电子表格的行高和列宽写入文本文件。
[0031]
有益效果:
[0032]
本发明通过文本文件的方式生成电子表格,比调用excel控件写文件快,又能生成带格式的表格效果,且对使用者套用不同格式的打印模板更为友好,对于不同格式,只需要重新设置字典表即可,无需做其他改动,通过修改字典表可以生成任何所需格式的电子表格,操作简单方便。
附图说明
[0033]
图1是本发明生成电子表格的流程图。
具体实施方式
[0034]
下面结合附图并通过具体实施方式来进一步说明本发明的技术方案。
[0035]
本发明的一种基于文本文件的格式化电子表格生成方法,如图1所示,包括如下步骤:
[0036]
制作格式模板;
[0037]
优选的,制作格式模板包括预设电子表格的行高和列宽。
[0038]
在实际操作中,为了更加符合生产所需,取一张空白凭证,在需要填入内容的位置用尺和笔框出位置,标好行号和列号,以此测量每一列的宽度和每一行的高度,并建表记录行高、列宽。
[0039]
建立字典表,所述字典表的元素为单元格参数;
[0040]
优选的,所述字典表的元素包括字段名、行、列、单元格样式、对齐方式、行合并数和列合并数,以所述字段名为索引;
[0041]
具体的如实施例一所示;
[0042]
实施例一:
[0043]
{’传票名称’,2,4,”,”,1,5};其中,传票名称表示字段名,2表示行数,4表示列数,第一个”表示单元格样式为无,第二个”表示对齐方式为无,1表示行合并数,5表示列合并数;
[0044]
{’年’,3,4,”,’center’,1,2};其中,年表示字段名,3表示行数,4表示列数,”表示单元格样式为无,’center’表示对齐方式为居中对齐,1表示行合并数,2表示列合并数。
[0045]
建立二维数组,所述二维数组的数据元素为单元格参数的属性的记录类型数据;
[0046]
在本实施例中,建立二维数组arr[行数,列数],数据元素为包含单元格样式、对齐方式、展示内容、行合并数、列合并数属性的记录类型数据;
[0047]
如:单元格样式,字符串类型,初始值为空;
[0048]
对齐方式,字符串类型,初始值为空;
[0049]
行合并数,数字类型,初始值为1;
[0050]
列合并数,数字类型,初始值为1。
[0051]
初始化二维数组,参照所述字典表,将单元格参数记录至所述二维数组;
[0052]
新建文本文件,将其后缀修改为excel可读格式,将格式模板写入文本文件;
[0053]
文本文件的后缀本来为“.txt”,在本申请中采用“.xls”或“.et”,例如“xxx.xls”,本申请中,采用的是html文件作为文本文件,html标记语言可以使用各种标签制作带格式的表格,html制作的表格文件后缀改为“.xls”或“.et”,可以被excel或wps表格直接打开。
[0054]
优选的,新建文本文件包括:
[0055]
使用自定义单元格通用格式和特殊数字格式创建文件头;
[0056]
创建表格头;
[0057]
将预设的电子表格的行高和列宽写入文本文件。
[0058]
初始化二维数组中每个数组单元的content值,从数据库中读取数据,根据字典表的索引将所读取数据的值一一写入对应的数组单元的content值;
[0059]
将二维数组写入文本文件,生成电子表格。
[0060]
本申请中,通过文本文件的方式生成电子表格,比调用excel控件写文件快,又能生成带格式的表格效果。且对使用者套用不同格式的打印模板更为友好,对不同格式,只需要重新设置字典表即可,由于字典表关联二维数组,而文本文件中依据写入二维数组来生成电子表格,因此只需修改字典表的元素即可重新设置用户所需的格式,对应生成电子表格。
[0061]
优选的,参照所述字典表,将格式模板参数记录至所述二维数组具体包括:
[0062]
电子表格中每个单元格对应二维数组中每个数组单元;
[0063]
在本申请中,所述二维数组为arr[行数,列数],通过二维数组来表示电子表格中每个单元格,如arr[1,2]表示电子表格中第一行第二列的单元格,再如arr[4,6]表示电子表格中第四行第六列的单元格;
[0064]
若格式模板中存在合并行格式的多个单元格,则在从上往下方向,以第一个单元格所对应的数组单元作为起点,设置其rowspan属性,rowspan=m,以起点所在数组单元所对应的单元格向下执行合并m个单元格操作;
[0065]
若格式模板中存在合并列格式的多个单元格,则在从左往右方向,以第一个单元格所对应的数组单元作为起点,设置其colspan属性,colspan=n,以起点所在数组单元所
对应的单元格向右执行合并n个单元格操作;
[0066]
具体的:
[0067]
如表一所示:
[0068][0069]
表一
[0070]
在本实施例中,格式模板是我们最终所要生成的电子表格,若是格式模板中,存在需要合并格式的多个单元格,如表一所示,其为3x4的格式,即为3行4列的表格样式,其中a单元格和b单元格存在合并格式,c单元格和g单元格同样存在合并格式;
[0071]
a单元格和b单元格式列合并,那么从左往右方向,以第一个单元格所对应的数组单元作为起点,即a单元格所对应的数组单元为起点,设置colspan属性,colspan=n,则可表示为a.colspan=2,n=2,即表示为a单元格向右合并2个单元格;
[0072]
c单元格和g单元格是行合并,那么从上往下方向,以第一个单元格所对应的数组单元作为起点,即c单元格所对应的数组单元为起点,设置rowspan属性,rowspan=m,则可表示为c.rowspan=2,m=2,即表示为c单元格向右合并2个单元格;
[0073]
需要说明的是,本实施例中,m≥0,n≥0,当m或者n等于0时,表示不发生合并操作,当m或者n等于1时,可表示为该单元格向其自身发生合并,同样可看做不发生合并操作,但是为了方便后续区分,本实施例用0和1进行区分;
[0074]
所述rowspan属性表示规定单元格可横跨的行数;
[0075]
所述colspan属性表示规定单元格可横跨的列数。
[0076]
优选的,扫描二维数组,将设置了rowspan属性的数组单元,rowspan=m,m>1,以其作为起点,将起点向下的m-1个数组单元的rowspan属性均设置为0,即rowspan=0;
[0077]
扫描二维数组,将设置了colspan属性的数组单元,colspan=n,n>1,以其作为起点,将起点向右的n-1个数组单元的colspan属性均设置为0,即colspan=0。
[0078]
具体的:
[0079]
如表二所示:
[0080][0081]
表二
[0082]
其中,表二中每个单元格的值表示rowspan值和colspan值,如第一行第一列的1,1表示rowspan=1,colspan=1,m和n均为1,再例如第一行第二列的2,1表示rowspan=2,colspan=1,m=2,n=1,则可理解为第一行第二列所在单元格作为起点,向下合并2个单元格,向右不发生合并操作;
[0083]
那么第二行第二列所在单元格由于其要被第一行第二列所在单元格合并,其自身是无法再向下合并的,故第二行第二列所在单元格的rowspan=0;
[0084]
如第3行第2列所在单元格的3,3表示为rowspan=3,colspan=3,m=3,n=3,可理解为以第3行第2列所在单元格为起点,向下和向右分别合并3个单元格,那么第3行第3列、第3行第4列、第4行第2列、第4行第3列、第4行第4列、第5行第2列、第5行第3列、第5行第4列均被合并,故这些单元格的rowspan值和colspan值均用0表示,表示不可进行合并操作。
[0085]
优选的,二维数组中,同时设置colspan=n和rowspan=m的数组单元,m>1,n>1,m值和n值必须相同,具体的:
[0086]
判断二维数组中数组单元是否设置了rowspan=m,m>1,若是,则接着判断该数组单元是否设置了colspan=n,n>1,若否,则执行合并m行操作;
[0087]
若该数组单元同时设置了colspan=n,n>1,则接着判断m值是否等于n值,若m=n,则同时执行合并m行和n列操作;
[0088]
若m≠n,则选取m值和n值之间的较大值,执行合并操作。
[0089]
具体的,如表二所示:
[0090]
如第3行第2列所在单元格的3,3表示为rowspan=3,colspan=3,m=3,n=3,可理解为以第3行第2列所在单元格为起点,向下和向右分别合并3个单元格,由于多个单元格合并之后,是成为一个单元格,并且行高或列宽均发生了改变,与其他未合并的单元格是不一样的,之间是无法进行合并的,因此必须保证rowspan值和colspan值一致,方可进行合并。
[0091]
以上结合具体实施例描述了本发明的技术原理。这些描述只是为了解释本发明的原理,而不能以任何方式解释为对本发明保护范围的限制。基于此处的解释,本领域的技术人员不需要付出创造性的劳动即可联想到本发明的其它具体实施方式,这些方式都将落入本发明的保护范围之内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1