CN104881275B - 一种电子报表生成方法及装置 - Google Patents
一种电子报表生成方法及装置 Download PDFInfo
- Publication number
- CN104881275B CN104881275B CN201510071247.7A CN201510071247A CN104881275B CN 104881275 B CN104881275 B CN 104881275B CN 201510071247 A CN201510071247 A CN 201510071247A CN 104881275 B CN104881275 B CN 104881275B
- Authority
- CN
- China
- Prior art keywords
- data
- file
- markup language
- extensible markup
- language files
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 62
- 238000012545 processing Methods 0.000 claims abstract description 35
- 230000008569 process Effects 0.000 claims description 14
- 230000006835 compression Effects 0.000 claims description 6
- 238000007906 compression Methods 0.000 claims description 6
- 238000004458 analytical method Methods 0.000 claims description 5
- 238000010586 diagram Methods 0.000 description 28
- 230000014509 gene expression Effects 0.000 description 25
- 235000010627 Phaseolus vulgaris Nutrition 0.000 description 5
- 244000046052 Phaseolus vulgaris Species 0.000 description 5
- 230000006870 function Effects 0.000 description 5
- 238000009795 derivation Methods 0.000 description 4
- 238000004519 manufacturing process Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 238000012216 screening Methods 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 238000012217 deletion Methods 0.000 description 2
- 230000037430 deletion Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000005538 encapsulation Methods 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 238000012935 Averaging Methods 0.000 description 1
- 235000006719 Cassia obtusifolia Nutrition 0.000 description 1
- 235000014552 Cassia tora Nutrition 0.000 description 1
- 244000201986 Cassia tora Species 0.000 description 1
- 238000013475 authorization Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 239000003795 chemical substances by application Substances 0.000 description 1
- 239000003086 colorant Substances 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 238000002372 labelling Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Document Processing Apparatus (AREA)
Abstract
本发明提供一种电子报表生成方法及装置,在获取到电子报表对应的模板文件后,可以对模板文件进行解析,得到需进行修改的多个底层XML文件,然后通过对其进行一系列处理后得到一压缩包,再将该压缩包的文件后缀名修改为所述电子报表对应的后缀名,以得到所述电子报表,因此由Microsoft开发的以XML为基础的电子表格都可以采用本发明实施例提供的电子报表生成方法得到,从而提高本发明实施例所提供方法的通用性。
Description
技术领域
本发明涉及电子报表技术领域,更具体地说,涉及一种电子报表生成方法及装置。
背景技术
电子报表是很多商业应用系统中用于数据对账、展示、分析、统计等功能的电子文件,作为商业应用系统中的重要组成部分,电子报表的数据量逐日增大且电子报表的格式日趋复杂。
例如,在代理财政综合服务的系统建设中,某银行需要按照财政部、人民银行的要求生成各类日报、月报、年报等,所要出具的电子报表的数据规模以及格式要求如下:
(1)数据量在数万行到十几万行之间。在一些交易量较大的工作日中,财政日报的数据记录经常会有数万条,而全年利息计算时所要处理的数据量也将达到数十万条。
(2)财政部、人民银行等单位的报表格式较复杂,对分页、分栏、空行、单元格行高、列宽、字体、合并单元格等报表样式也有较严格的要求。
(3)一份报表不能分解成多张完成,也不能在表内分多个sheet展示。
以财政授权支出日报为例来说明电子报表的格式要求,要求对所有的数据行进行分页,每页共计24行,同时,在每一页内,要求对所有数据分两列显示,左右各24条数据,序号按照先左后右的顺序递增,对每个单元格中的中文和金钱等都各有要求,另外,对于制表日期、当前页数、总页数等信息要随时间、页码自动变更。
目前生成电子报表的工具分别是:采用Apache POI类库操作Excel的各类工具,比如润乾报表、ExcelUtils(一种基于Apache POI类库的java报表制作工具)和JXLS(一种基于Apache POI类库的java报表制作工具)等。
发明内容
有鉴于此,本发明的目的是提供一种电子报表生成方法及装置,用于提供一种不基于Apache POI类库等现有技术的电子报表生成方式。为了实现上述目的,本发明提供如下技术方案:
本发明一种电子报表生成方法,所述方法包括:
获取所述电子报表对应的模板文件;
对所述模板文件进行解析,得到需进行修改的多个底层可扩展标记语言文件;
依据所述多个底层可扩展标记语言文件,对所述多个底层可扩展标记语言文件在程序中对应的基础类进行初始化,得到所述多个底层可扩展标记语言文件中的sheet.xml文件和sharedStrings.xml文件中指向数据的链接行,其中所述sheet.xml文件为电子表格中工作表的文件,sharedStrings.xml文件用于存储所述电子报表中每一个sheet的真实数据;
获取其他底层可扩展标记语言文件的修改数据以及依据所述链接行中的每个组件获取所述sheet.xml文件和sharedStrings.xml文件中每个单元格所需的真实数据,其中每个组件用于指向所述电子报表中每个单元格所需数据;
使用文件输入输出流的方式将所述真实数据和所述修改数据写入到对应的所述多个底层可扩展标记语言文件中;
将写入数据的多个底层可扩展标记语言文件进行压缩,并将压缩后得到的压缩包的文件后缀名修改为所述电子报表对应的后缀名,以得到所述电子报表。
优选地,所述使用文件输入输出流的方式将所述真实数据和所述修改数据写入到对应的所述多个底层可扩展标记语言文件中,包括:
将所述真实数据和所述修改数据写入到内存中;
当所述内存中所述数据的数据量大于第一预设值时,从所述内存中获取数据量为第二预设值的数据;
使用文件输入输出流的方式将从内存中获取的数据写入到对应的所述多个底层可扩展标记语言文件中。
优选地,所述依据所述多个底层可扩展标记语言文件,对所述多个底层可扩展标记语言文件在程序中对应的基础类进行初始化,得到所述多个底层可扩展标记语言文件中的sheet.xml文件和sharedStrings.xml文件中指向数据的链接行,包括:
依据所述多个底层可扩展标记语言文件,对所述多个底层可扩展标记语言文件在程序中对应的基础类进行初始化,并采用自上而下的方式对sheet.xml文件和sharedStrings.xml文件中的组件进行处理,得到所述多个底层可扩展标记语言文件中的sheet.xml文件和sharedStrings.xml文件中指向数据的链接行。
优选地,所述使用文件输入输出流的方式将所述真实数据写入到对应的所述多个底层可扩展标记语言文件中,包括:
判断从数据源获取到的真实数据是否可以直接写入对应的所述多个底层可扩展标记语言文件中;
如果是,使用文件输入输出流的方式将所述真实数据写入到对应的所述多个底层可扩展标记语言文件中;
如果否,对从数据源中获取的真实数据进行处理以使其可以写入到对应的所述多个底层可扩展标记语言文件中,并使用文件输入输出流的方式将处理后的真实数据写入到对应的所述多个底层可扩展标记语言文件中。
优选地,当数据源是数据库时,使用SQL标签获取数据库中的真实数据,当数据源是文件时,使用File标签获取文件中的真实数据。
本发明提供一种电子报表生成装置,所述装置包括:
第一获取单元,用于获取所述电子报表对应的模板文件;
解析单元,用于对所述模板文件进行解析,得到需进行修改的多个底层可扩展标记语言文件;
初始化单元,用于依据所述多个底层可扩展标记语言文件,对所述多个底层可扩展标记语言文件在程序中对应的基础类进行初始化,得到所述多个底层可扩展标记语言文件中的sheet.xml文件和sharedStrings.xml文件中指向数据的链接行,其中所述sheet.xml文件为电子表格中工作表的文件,sharedStrings.xml文件用于存储所述电子报表中每一个sheet的真实数据;
第二获取单元,用于获取其他底层可扩展标记语言文件的修改数据以及依据所述链接行中的每个组件获取所述sheet.xml文件和sharedStrings.xml文件中每个单元格所需的真实数据,其中每个组件用于指向所述电子报表中每个单元格所需数据;
写入单元,用于使用文件输入输出流的方式将所述真实数据和所述修改数据写入到对应的所述多个底层可扩展标记语言文件中;
修改单元,用于将写入数据的多个底层可扩展标记语言文件进行压缩,并将压缩后得到的压缩包的文件后缀名修改为所述电子报表对应的后缀名,以得到所述电子报表。
优选地,所述写入单元包括:
第一写入子单元,用于将所述真实数据和所述修改数据写入到内存中;
获取子单元,用于当所述内存中所述数据的数据量大于第一预设值时,从所述内存中获取数据量为第二预设值的数据;
第二写入子单元,用于使用文件输入输出流的方式将从内存中获取的数据写入到对应的所述多个底层可扩展标记语言文件中。
优选地,所述初始化单元具体用于:依据所述多个底层可扩展标记语言文件,对所述多个底层可扩展标记语言文件在程序中对应的基础类进行初始化,并采用自上而下的方式对sheet.xml文件和sharedStrings.xml文件中的组件进行处理,得到所述多个底层可扩展标记语言文件中的sheet.xml文件和sharedStrings.xml文件中指向数据的链接行。
优选地,所述写入单元包括:
判断子单元,用于判断从数据源获取到的真实数据是否可以直接写入对应的所述多个底层可扩展标记语言文件中;
第三写入子单元,用于当所述判断子单元判断从数据源获取到的真实数据可以直接写入对应的所述多个底层可扩展标记语言文件中时,使用文件输入输出流的方式将所述真实数据写入到对应的所述多个底层可扩展标记语言文件中;
处理子单元,用于当所述判断子单元判断从数据源获取到的真实数据不可以直接写入对应的所述多个底层可扩展标记语言文件中时,对从数据源中获取的真实数据进行处理以使其可以写入到对应的所述多个底层可扩展标记语言文件中,并使用文件输入输出流的方式将处理后的真实数据写入到对应的所述多个底层可扩展标记语言文件中。
优选地,当数据源是数据库时,使用SQL标签获取数据库中的真实数据,当数据源是文件时,使用File标签获取文件中的真实数据。
与现有技术相比,本发明的优点如下:
本发明提供的电子报表生成方法及装置,在获取到电子报表对应的模板文件后,可以对模板文件进行解析,得到需进行修改的多个底层XML(Extensible MarkupLanguage,可扩展标记语言)文件,然后通过对其进行一系列处理后得到一压缩包,再将该压缩包的文件后缀名修改为所述电子报表对应的后缀名,以得到所述电子报表,因此由Microsoft开发的以XML为基础的电子表格都可以采用本发明实施例提供的电子报表生成方法得到,并且从本发明实施例提供的电子报表生成方法及装置所示流程来看,其在生成电子报表过程中并未基于Apache POI类库等现有技术,而是一种新的有别于现有基于Apache POI类库等现有技术的电子报表生成方式。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例提供的电子报表生成方法的一种流程图;
图2为本发明实施例提供的一种模板文件的示意图;
图3为本发明实施例提供的模板文件修改解压后得到的文件夹中的文件结构图;
图4为本发明实施例提供的[Content_Types].xml的文档结构图;
图5为本发明实施例提供的workbook.xml的文档结构图;
图6为本发明实施例提供的workbook.xml.rels的文档结构图;
图7为本发明实施例提供的sheet1.xml的文档结构图;
图8为本发明实施例提供的sharedStrings.xml的文档结构图;
图9为本发明实施例提供的styles.xml的文档结构图;
图10为本发明实施例提供的app.xml的文档结构图;
图11为本发明实施例提供的包结构和继承关系的示意图;
图12为图1所示电子报表生成方法中写入数据的流程图;
图13图2所示模板文件对应的电子报表的示意图;
图14为本发明实施例提供的另一种模板文件的示意图;
图15为图14所示模板文件对应的电子报表的示意图;
图16为本发明实施例提供的电子报表生成装置的一种结构示意图;
图17为图16所示电子报表生成装置中写入单元的一种结构示意图;
图18为图16所示电子报表生成装置中写入单元的另一种结构示意图。
具体实施方式
首先为了使本领域技术人员更好地理解本发明实施例,将对本发明实施例涉及的专用术语进行介绍:
xlsx:由Microsoft开发的一种以XML为基础并以ZIP格式压缩的电子表格文件规范,属于ISO 29500标准的一部分;从Microsoft Office EXCEL 2007开始xlsx已成为其默认文件格式,同时国产软件WPS(Word Processing System,文字编辑系统)也支持该文件规范;
电子报表:银行等商业系统中用于数据对账、展示、分析、统计等功能的电子文件;
模板文件:是指本发明中为生成最终电子报表而提前准备好的某种样板报表;可以通过Microsoft Office EXCEL软件编辑此模板文件,定义最终电子报表的各种展现样式、数据来源及各种数据处理转化标签;
标签:是指本发明中可自定义的具有数据处理与逻辑处理功能的组件;模板文件中所引用的标签,其语法形式常以<FAP:>开始,</FAP>结束;
变量:这里是指模板文件中的变量,以${}标识,本发明中变量属于表达式中的一种;
表达式:这里是指模板文件中定义的获取数据的表达式,以${}标识;
公式:这里是指模板中文件所引用的公式,以${F_公式名}标识;常用于电子报表中动态单元格的求和、求平均等操作;本发明中的公式属于标签的一种;
大数据量:本发明中特指单个电子报表超过10万行数据的场景。
内存溢出:是指程序运行时,进程所需内存超出进程所能获得内存时的一种现象;
上下文无关文法最右推导:在推导的任何一步A=>B(其中A B是句型),都对A中最右非终结符进行替换。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1,其示出了本发明实施例提供的电子报表生成方法的一种流程图,可以包括以下步骤:
101:获取电子报表对应的模板文件。其中模板文件为预生成的某种类型的电子报表的一个通用文件,通过采用下述步骤对通用文件进行处理则可以得到电子报表。这样对于同一种类型的电子报表来说可以使用同一个模板文件,也就是说本发明实施例支持套用模板文件,以减少程序端的格式操作,将电子报表直接与数据库联系。
在本发明实施例中,模板文件包括:表头、数据部分和表尾,数据部分至少包括标签和以数据对象为基础的表达式两部分,模板文件中表头和表尾在电子报表中也要存在,其具体信息与模板文件中的信息相同,因此可以将表头和表位对应的具体信息写入到后续的底层XML文件中即可,相对于现有技术来说,降低对模板文件操作的复杂度。
模板文件的示意图可以参阅图2所示,图2为预生成的财政日报这一日报类型的电子报表的模板文件。在图2中“序号”一行为模板文件的表头部分,其余部分为数据部分,在图2所示的数据部分包括:ForEach标签、If标签、PageBreak标签和表达式。其中每个标签都是以“<FAP:”开始,以“</FAP>”结束,<FAP:为标签所在行的开始行,</FAP>为标签所在行的结束行,开始行和结束行之间包含的行列为该标签的作用域。在最终的电子报表中,模板文件中原本的标签所在行将被删去,不出现在电子报表中,下面介绍本发明实施例所提供的标签:
ForEach标签
该标签中,items属性对应着表示大数据的数据对象,比如这里的“pages”,其是一个List对象,var属性的值为“page”,表示pages的一个引用,在其作用域内指代pages这个对象,比如制表日期一项中为${page.makedate},即将pages这个对象的makedate变量的值填充到制表日期这一项中。通常,在一个List对象中存储着数十万条数据信息,对应着每一行数据,ForEach标签的作用就是将这些bean中所包含的数据信息循环写入到模板文件中,bean为包含较多数据的数据集合,可以将其看做一个大数据的数据对象。
If标签
该标签主要起到数据筛选的作用,当数据信息满足If标签的test属性中的表达式时,该数据信息才被填充到这一行,这在模板文件的排序操作中经常用到,比如模板文件中每一个row(行)的rowtype有1、2、3、4四种类型,本发明会自动判断该row的类型,并将符合条件的行数据放在模板文件中。
PageBreak标签
该标签是起分页的作用,很多电子报表在打印时对每一页的标题、行数等会有要求,开发者可以在模板文件中采用PageBreak来添加分页。
下面介绍代表着真实数据的表达式:
表达式的形式为“${}”,大括号中的内容表示要访问的数据对象的某一个属性。例如在本发明实例中,pages这个List对象里包含多个部分:makedate表示制表日期、rows作为嵌套的又一个List对象表示所有row的集合等等。当本发明实施例获取到${page.makedate}这个表达式时,将在pages中找到makedate这个变量并将其值填充到对应单元格。本发明实施例支持任意深度的对象属性访问,比如${bean.bean1.bean2.bean3…},同时,本发明实施例还支持在同一个单元格中写入多个属性,比如“${row.left.je}+${row.right.je}”,该表达式得到的将是左右两栏金额的和。
${bean.bean1.bean2.bean3…}可以使数据达到bean层级的无限嵌套,其中bean层级的无限嵌套是指将一个对象的多个属性的数据集成在一个数据集合中或者将多个对象的同一属性的数据集成在一个数据集合中。在获取数据时,首先找到bean1对应的对象,然后动态调用bean1的getBean2()方法来得到bean2,如此直到最后一层java bean。另一种无限嵌套的表达式可以是${ds1.[]....字段名},这里ds1对应该SQL语句执行后所得到的结果集,[]中对应的内容为筛选条件,可支持多项筛选条件,直到找到满足条件的唯一一条行数据,再根据字段名,选择该行数据的该字段进行填充。
102:对模板文件进行解析,得到需进行修改的多个底层XML文件。
在本发明实施例中,将以微软的Excel2007及以上版本为例介绍解析模板文件以得到底层XML文件的可行方式。发明人经过研究发现依据微软在Excel2007及以上版本中采用Open XML技术规范,当把一个Excel2007当做一个压缩文件打开的时候,Workbook、Sheet、Styles等信息均以XML文件存放在相应文件夹中,下面通过一个具体实例来剖析Excel 2007(2010)XML文件的结构,然后由底层实现出发阐述。
将一个xlsx格式的模板文件的后缀“.xlsx”修改为“.zip”,并解压到一个文件夹中,其文件结构如图3所示,其包括有7个底层XML文件,所谓底层XML文件即位于操作系统最底层且类型为XML的文件,具体为:[Content_Types].xml、workbook.xml、workbook.xml.rels、sheet1.xml、sharedStrings.xml、styles.xml和app.xml。其中,
[Content_Types].xml的文档结构图如图4所示,该文件包含了压缩包中每个XML文件的相关信息,当其他XML文件发生改变时,这个文件也要随之修改,否则将该压缩包还原回Excel时会发生冲突。
workbook.xml的文档结构图如图5所示,对于该文件最需要注意的就是sheet元素及其所有属性。根据图4所示的文档结构图,在xl/worksheets/下存在3个描述Excel中各个sheet文件的sheet1.xml等文件,但这些文件的文件名(sheet1)并不是对应sheet的真实名字,需要通过“r:id”这个属性,在workbook.xml这个文件中查找每个sheet的真实名字,即name属性的内容(Sheet1)。sheetId这个属性表示每个sheet的生成序号,假如此时删除Sheet1,Sheet2和Shee3的sheetId依然是2、3,若此时再新建一个Sheet1,那新建的Sheet1的sheetId将改为4。当添加、删除、重命名时,一定要在这个文件中做好r:id和name的mapping,以及正确的给sheetId赋值。
workbook.xml.rels的文档结构图如图6所示,这个文件的主要作用是对每一个重要XML文件(Target属性)赋予一个Relationship ID(Id属性),这样每个XML文件就可以依据此ID到workbook.xml文件中找其对应的真实。
sheet1.xml的文档结构图如图7所示,其是电子表格中工作表的文件,本发明实施例生成电子报表的关键,因为该工具的实现思路就是将模板文件中的sheet1.xml的标签、表达式替换为真实数据,最重要的就是涉及底层sheet.xml文件的修改,即dimension、sheetData、mergeCells这三个元素。其中,dimension标明了该sheet的二维区间,要根据实际数据量做修改;sheetData中包含全部的行元素(row),属性r表示行号,spans表示该行的范围,每个row又包含该行所有的cell元素,在每个cell元素中,属性r表示单元格的坐标,属性t表示该元素的类型,当其为“s”时,表示该cell内容是一个字符串,需要根据<V>标签的数字,到sharedStrings.xml中去找到所对应的真实数据,当不存在属性t时,表示这是一个数字类型,<V>标签的值就是真实数据;mergeCells中的各个mergeCell元素该sheet的每个合并单元格,属性count表示总数,属性ref标明了该合并单元格的二维信息。
sharedStrings.xml的文档结构图如图8所示,本发明实施例得到的电子报表中每一个sheet的所有字符串内容(真实数据),都存放在sharedStrings.xml这个文件中,对于重复出现的内容,只以一个<si>标签来表示,属性count表示真实数据的所有字符串的总数,属性uniqueCount表示不重复的字符串的数量;在每一个<si>标签中,t元素表示字符串的内容,这里各个字符串有一个隐藏的属性,就是各个字符串在整个序列中的序号,sheet1.xml中每个cell元素的<V>标签所表示的数字就与该cell元素的真实数据在sharedStrings.xml的序号是一一对应的,解析时会依据这个数字到sharedStrings.xml中找相应位置上的值。
styles.xml的文档结构图如图9所示,该文件记录了几乎所有Excel的电子表格相关的格式信息,包括字体、颜色、边框等等。Apache POI类库中复杂的格式处理使得代码维护非常麻烦,在本发明实施例中将所有的格式信息写入模板文件中,即在模板文件中设置好电子报表的字体、行高、列宽、合并单元格、边框、分页等信息,实际生成电子报表时,只是读取已有格式信息,不做改动,这既省去了大量的代码工作,又使得格式问题在外部模板文件里可以得到很好的解决。
app.xml的文档结构图如图10所示,app.xml文件中也有对于sheet数量和名称的相关信息,Excel的电子报表有改动时,也需要在该文件中做相应修改,不然将所有底层文件合并回原来的Excel的电子报表时,会出现冲突而失败。
要得到最终的电子报表,则需要将真实数据写入到上述7个底层XML文件。在修改每个底层XML文件时,除了确保改动的正确性,改动的顺序也不容疏忽。其改动顺序为:按照由细节到整体的顺序,先修改sheet1.xml、sharedStrings.xml文件,再修改workbook.xml、workbook.xml.rels等其他剩余的五个文件。
103:依据所述多个底层XML文件,对所述多个底层XML文件在程序中对应的基础类进行初始化,得到所述多个底层XML言文件中的sheet.xml文件和sharedStrings.xml文件中指向数据的链接行。
在对上述7个XML文件进行初始化时,可以按照上述改动顺序依次对多个底层XML文件中在程序中对应的基础类进行初始化。本发明实施例根据底层XML文件的种类、组件处理方式及数据封装方式等设计了包结构和继承关系,如图11所示,依次构造出WorkBook、Sheet、Row、Cell、MergeCell和SharedStringsXML基础类及相关方法,对应模板文件中用到的标签、公式和表达式分别抽象成Tag包、Formula、Expression类;其次,针对标签和表达式这两个模板文件中的要素,分别设置相应的transformer类,在后续将数据写入是可以通过解析transformer类中的内容以将相应的数据写入到相应行中。
在本发明实施例中,由于不同电子报表所需要的模板文件不同,这就要对多个底层XML文件在程序中对应的基础类进行初始化,将所携带的填表信息录入到程序中,以满足不同模板文件的个性化需求。
并且在对底层XML文件进行初始化时,可以从底层XML文件中分离出指向真实数据的链接行,每个链接行中记载有用于指向电子报表中每个单元格所需数据的组件,基于该组件则可以获取电子报表中每个单元格所需的数据。其中链接行包括:标签行、表达式行、公式行和其他信息行(其他信息行记录表头和表尾等固定信息),相对应的链接行中的组件包括:标签、公式和表达式。
在本发明实施例中,采用自上而下的方式对sheet.xml文件和sharedStrings.xml文件中的组件进行处理,得到所述多个底层可扩展标记语言文件中的sheet.xml文件和sharedStrings.xml文件中指向数据的链接行,后续可以根据每个链接行中的组件获取到电子报表中每个单元格所需的数据来写入,实现模板文件的代码区与真实数据相分离。并且上述得到链接行和真实数据的方式为一种依据代码区动态执行组件生产数据的方式,这种方式可以使得本发明实施例不对模板文件的大致框架和结构进行固定。
而在现有技术中,通常采用jxls等工具使用上下文无关文法句型推导法将模板展开后再处理的方式,即会根据标签等预先确定模板文件的大致框架和结构,而在实例化每个单元格时,针对真实数据情况,再对报表结构进行调整,这样就会导致对已经分配的单元格进行重新规划和移动,这无疑会造成大量无用的操作,出现内存占用大的情况。因此本发明实施例采用的依据代码区动态执行组件生产数据的方式,避免了因电子报表行删除操作而带来的大量计算资源消耗(如内存消耗),大大加快了电子报表的生成速度。
104:获取其他底层XML文件的修改数据以及依据链接行中的每个组件获取sheet.xml文件和sharedStrings.xml文件中每个单元格所需的真实数据,其中每个组件用于指向电子报表中每个单元格所需数据。
105:使用文件IO(Input/Output,输入输出)流的方式将真实数据和修改数据写入到对应的多个底层XML文件中。
现有技术在采用Apache POI类库进行Excel操作时,对应的Workbook(工作薄)、Sheet(工作表)、Row(行)和Cell(单元格)等对象都会存放到内存里,直到最后一条数据实例化、整个Excel构造完毕后,才会一起写入到指定文件中,在这之前内存始终得不到释放。Apache POI的这种实现机制决定了在处理大数据量电子报表生成时会很容易报出内存溢出异常,使其不适用于银行类等大数据量电子报表的生成。而在本发明实施例中,提供写入数据的一种可行方式,使其能够解决现有技术的上述问题,如图12所示,其介绍如何使用文件IO流的方式将真实数据和修改数据写入到对应的多个底层XML文件中,可以包括以下步骤:
1051:将真实数据和修改数据写入到内存中。
1052:当内存中数据的数据量大于第一预设值时,从内存中获取数据量为第二预设值的数据。
1053:使用文件IO流的方式将从内存中获取的数据写入到对应的多个底层XML文件中。在本发明实施例中图4和图10为需要修改的7个底层XML文件,每个附图中矩形方框所框住区域为从步骤1052中获取的数据写入的区域,采用文件IO流的方式可以将获取的数据写入到对应的区域中。
在将真实数据和修改数据写入到对应的多个底层XML文件中同时,释放所获取的数据占用的内存,这样可以有效的降低本发明对系统资源的开销,不需要在进行大数据量处理时专门设置JVM,性能稳定。其中第一预设值为在内存中缓存数据的数据量上限,第二预设值可以是一次写入数据使系统资源开销最优情况下的数据量上限。例如第一预设值可以为200行数据,相应的第二预设值为100行数据。
即在写入数据时保留在内存中的数据上限为200行,当内存中存放的数据量达到200行时,一次性将其中100行通过文件IO流写入到对应的底层XML文件中,并释放这部分数据所占用的内存。这样可以避免现有技术将所有数据都获取后保存在内存中再一次性导入的做法,有效的降低本发明实施例对系统资源尤其是内存的开销,不需要在进行大数据量处理时专门设置JVM从而使其能够适用于大数据量电子报表的生成,且性能稳定。
106:将写入数据的多个底层XML文件进行压缩,并将压缩后得到的压缩包的文件后缀名修改为电子报表对应的后缀名,以得到电子报表。
在本发明实施例中,电子报表对应的后缀名是设备中所安装的表格文件的后缀名,例如可以是.xlsx或者.et,其中.et是WPS中电子报表的后缀名,当将压缩包的文件后缀名修改为电子报表对应的后缀名之后,电子报表被自动生成。如图13所示,为将图2所示模板文件经过图1所示方法处理后得到的电子报表。
通过本发明实施例提供的电子报表生成方法,在获取到电子报表对应的模板文件后,可以对模板文件进行解析,得到需进行修改的多个底层XML文件,然后通过对其进行一系列处理后得到一压缩包,再将该压缩包的文件后缀名修改为所述电子报表对应的后缀名,以得到所述电子报表,因此由Microsoft开发的以XML为基础的电子表格都可以采用本发明实施例提供的电子报表生成方法得到,并且从本发明实施例提供的电子报表生成方法所示流程来看,其在生成电子报表过程中并未基于Apache POI类库等现有技术,而是一种新的有别于现有基于Apache POI类库等现有技术的电子报表生成方式。
进一步通过本发明实施例提供的电子报表生成方法对财政日报的生成进行测试后得到如表1所示数据,所有测试均不需要增加JVM(Java Virtual Machine,Java虚拟机),在默认值下即可成功执行程序。
表1报表生成参数表
按照现有技术生成相同数据量的报表时,财政日报、年度代理量计算报表需要20-30分钟,利息计算报表需要1-2个小时,在时间对比上,无疑本发明实施例将效率提升了数倍;以往的报表文件格式为html,在维护及格式要求上,空间都十分有限,而本发明实施例可以生成Excel2007的电子报表,无论是后期维护,还是格式美观均能满足财政部、人民银行对电子报表提出的要求。
此外,由于商业应用系统中真实数据的种类众多,所以会存在某些真实数据不能满足模板文件的数据要求的情况,在这种情况下需要判断从数据源获取到的真实数据是否可以直接写入对应的所述多个底层可扩展标记语言文件中;如果是,使用文件IO流的方式将真实数据写入到对应的所述多个底层XML文件中;如果否,对从数据源中获取的真实数据进行处理以使其可以写入到对应的所述多个底层可扩展标记语言文件中,并使用文件IO流的方式将处理后的真实数据写入到对应的所述多个底层XML文件中。
其中,数据源可以是数据库或者文件,当数据源是数据库时,使用SQL标签获取数据库中的真实数据,当数据源是文件时,使用File标签获取文件中的真实数据。SQL标签为用于指向数据库的组件,File标签为用于指向文件的组件。
以图14为例,该图14为中央授权支付月度明细表对应的模板文件,这里除了用到了ForEach和If两个标签以外,还用到了Attribute和SQL两个标签,下面介绍一下这两个标签的使用。
Attribute标签
在常见的JDBC(Java Data Base Connectivity,java数据库连接)数据库操作中,经常遇到中文是否需要转码的处理问题,从数据库中读出的中文信息,需要经过ISO(Isolation,镜像文件格式)到GBK(Chinese Internal Code Specification,汉字内码扩展规范)的转码,才能使中文正常显示,同理,在通过JDBC执行SQL语句时,还需要将SQL语句中的中文做GBK到ISO的转码,才能使数据库正确的识别。该标签中,transcode属性表示本次报表生成过程中,是否需要对上述两种情况进行转码,值为“true”时,表示需要这一层转码操作,否则不需要进行转码操作。
SQL标签
当从数据库中获取真实数据直接填入模板文件时,该标签是最重要的处理标签,因为整个数据源的获取都依托于该标签sql属性中的SQL语句,比如标签为<FAP:SQL ds="ds1"sql="select name,sex,college from StudentMessage"/>,程序会自动去数据库中获取SQL语句的执行结果,并存为名叫ds1的结果集,在模板文件中填入${ds1.name},表示填入的值是该结果集中一条数据的name字段,这样可以直观的将表名、字段名同模板文件的表达式联系起来。
图14所示的中央授权支付月度明细表对应的模板文件在经过图1所示的电子报表生成方法的处理后,得到如图15所示的中央授权支付月度明细表。在得到该中央授权支付月度明细表时,无需对获取到的真实数据进行处理,就可以直接将其写入到底层XML文件中。
另外,本发明实施例提供的电子报表生成方法可以基于java创建,在使用时也可以实现跨平台使用,并且其提供众多变量、表达式、标签、公式的使用使得模板文件的写入功能非常强大,进一步还可以提供java开发api(Application Program Interface,应用程序编程接口),该api用于实现后台的处理。
对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
与上述方法实施例相对应,本发明实施例还提供一种电子报表生成装置,其结构示意图如图16所示,可以包括:第一获取单元11、解析单元12、初始化单元13、第二获取单元14、写入单元15和修改单元16。其中,
第一获取单元11,用于获取所述电子报表对应的模板文件。其中模板文件为预生成的某种类型的电子报表的一个通用文件,通过采用下述步骤对通用文件进行处理则可以得到电子报表。这样对于同一种类型的电子报表来说可以使用同一个模板文件,也就是说本发明实施例支持套用模板文件,以减少程序端的格式操作,将电子报表直接与数据库联系。
在本发明实施例中,模板文件包括:表头、数据部分和表尾,数据部分至少包括标签和以数据对象为基础的表达式两部分,模板文件中表头和表尾在电子报表中也要存在,其具体信息与模板文件中的信息相同,因此可以将表头和表位对应的具体信息写入到后续的底层XML文件中即可,相对于现有技术来说,降低对模板文件操作的复杂度。模板文件的示意图可以参阅图2所示,具体对图2所示的模板文件的描述可以参阅方法实施例部分说明,对此不再进行阐述。
解析单元12,用于对所述模板文件进行解析,得到需进行修改的多个底层XML文件。其解析过程可以是将模板文件的后缀修改为某种压缩格式的后缀,在对其进行解压得到一个包括需进行修改的多个底层XML文件的文件夹,具体过程以及多个底层XML文件的文档结构图可以参阅上述方法实施例中步骤102处的相关说明,对此不再进行阐述。
初始化单元13,用于依据所述多个底层XML文件,对所述多个底层XML文件在程序中对应的基础类进行初始化,得到所述多个底层XML文件中的sheet.xml文件和sharedStrings.xml文件中指向数据的链接行,其中所述sheet.xml文件为电子表格中工作表的文件,sharedStrings.xml文件用于存储所述电子报表中每一个sheet的真实数据。
在对上述7个XML文件进行初始化时,可以按照上述改动顺序依次对多个底层XML文件中在程序中对应的基础类进行初始化。本发明实施例根据底层XML文件的种类、组件处理方式及数据封装方式等设计了包结构和继承关系,依次构造出WorkBook、Sheet、Row、Cell、MergeCell和SharedStringsXML基础类及相关方法,对应模板文件中用到的标签、公式和表达式分别抽象成Tag包、Formula、Expression类;其次,针对标签和表达式这两个模板文件中的要素,分别设置相应的transformer类,在后续将数据写入是可以通过解析transformer类中的内容以将相应的数据写入到相应行中。
在本发明实施例中,由于不同电子报表所需要的模板文件不同,这就要对多个底层XML文件在程序中对应的基础类进行初始化,将所携带的填表信息录入到程序中,以满足不同模板文件的个性化需求。并且在对底层XML文件进行初始化时,可以从底层XML文件中分离出指向真实数据的链接行,每个链接行中记载有用于指向电子报表中每个单元格所需数据的组件,基于该组件则可以获取电子报表中每个单元格所需的数据。其中链接行包括:标签行、表达式行、公式行和其他信息行(其他信息行记录表头和表尾等固定信息),相对应的链接行中的组件包括:标签、公式和表达式。
在本发明实施例中,初始化单元13采用自上而下的方式对sheet.xml文件和sharedStrings.xml文件中的组件进行处理,得到所述多个底层可扩展标记语言文件中的sheet.xml文件和sharedStrings.xml文件中指向数据的链接行,后续可以根据每个链接行中的组件获取到电子报表中每个单元格所需的数据来写入,实现模板文件的代码区与真实数据相分离。并且上述得到链接行和真实数据的方式为一种依据代码区动态执行组件生产数据的方式,这种方式可以使得本发明实施例不对模板文件的大致框架和结构进行固定。
而在现有技术中,通常采用jxls等工具使用上下文无关文法句型推导法将模板展开后再处理的方式,即会根据标签等预先确定模板文件的大致框架和结构,而在实例化每个单元格时,针对真实数据情况,再对报表结构进行调整,这样就会导致对已经分配的单元格进行重新规划和移动,这无疑会造成大量无用的操作,出现内存占用大的情况。因此本发明实施例采用的依据代码区动态执行组件生产数据的方式,避免了因电子报表行删除操作而带来的大量计算资源消耗,大大加快了电子报表的生成速度。
第二获取单元14,用于获取其他底层XML文件的修改数据以及依据所述链接行中的每个组件获取所述sheet.xml文件和sharedStrings.xml文件中每个单元格所需的真实数据,其中每个组件用于指向所述电子报表中每个单元格所需数据。
写入单元15,用于使用文件IO流的方式将所述真实数据和所述修改数据写入到对应的所述多个底层XML文件中。
在本发明实施例中,写入单元15可以先将真实数据和修改数据写入到内存中,然后再从内存中写入到对应的多个底层XML文件中。例如图17所示的写入单元15的结构示意图,可以包括:第一写入子单元151、获取子单元152和第二写入子单元153,其中:
第一写入子单元151,用于将所述真实数据和所述修改数据写入到内存中。
获取子单元152,用于当所述内存中所述数据的数据量大于第一预设值时,从所述内存中获取数据量为第二预设值的数据。
第二写入子单元153,用于使用文件IO流的方式将从内存中获取的数据写入到对应的所述多个底层XML文件中。
在本发明实施例中图4和图10为需要修改的7个底层XML文件,每个附图中矩形方框所框住区域为获取子单元152中获取的数据写入的区域,采用文件IO流的方式可以将获取的数据写入到对应的区域中。
在将真实数据和修改数据写入到对应的多个底层XML文件中同时,释放所获取的数据占用的内存,这样可以有效的降低本发明对系统资源的开销,不需要在进行大数据量处理时专门设置JVM,性能稳定。其中第一预设值为在内存中缓存数据的数据量上限,第二预设值可以是一次写入数据使系统资源开销最优情况下的数据量上限。例如第一预设值可以为200行数据,相应的第二预设值为100行数据。
即在写入数据时保留在内存中的数据上限为200行,当内存中存放的数据量达到200行时,一次性将其中100行通过文件IO流写入到对应的底层XML文件中,并释放这部分数据所占用的内存。这样可以避免现有技术将所有数据都获取后保存在内存中再一次性导入的做法,有效的降低本发明对系统资源的开销,不需要在进行大数据量处理时专门设置JVM,性能稳定。
修改单元16,用于将写入数据的多个底层XML文件进行压缩,并将压缩后得到的压缩包的文件后缀名修改为所述电子报表对应的后缀名,以得到所述电子报表。
在本发明实施例中,电子报表对应的后缀名是设备中所安装的表格文件的后缀名,例如可以是.xlsx或者.et,其中.et是WPS中电子报表的后缀名,当将压缩包的文件后缀名修改为电子报表对应的后缀名之后,电子报表被自动生成。如图13所示,为将图2所示模板文件经过图1所示方法处理后得到的电子报表。
通过本发明实施例提供的电子报表生成装置,在获取到电子报表对应的模板文件后,可以对模板文件进行解析,得到需进行修改的多个底层XML文件,然后通过对其进行一系列处理后得到一压缩包,再将该压缩包的文件后缀名修改为所述电子报表对应的后缀名,以得到所述电子报表,因此由Microsoft开发的以XML为基础的电子表格都可以采用本发明实施例提供的电子报表生成装置得到,并且从本发明实施例提供的电子报表生成装置所示流程来看,其在生成电子报表过程中并未基于Apache POI类库等现有技术,而是一种新的有别于现有基于Apache POI类库等现有技术的电子报表生成方式。
此外,由于商业应用系统中真实数据的种类众多,所以会存在某些真实数据不能满足模板文件的数据要求的情况,在这种情况下需要写入单元15进行判断后再写入,如图18所示的写入单元15的另一种结构示意图,可以包括:判断子单元154、第三写入子单元155和处理子单元156,其中:
判断子单元154,用于判断从数据源获取到的真实数据是否可以直接写入对应的所述多个底层XML文件中。
第三写入子单元155,用于当所述判断子单元判断从数据源获取到的真实数据可以直接写入对应的所述多个底层XML文件中时,使用文件IO流的方式将所述真实数据写入到对应的所述多个底层XML文件中。
处理子单元156,用于当所述判断子单元判断从数据源获取到的真实数据不可以直接写入对应的所述多个底层XML文件中时,对从数据源中获取的真实数据进行处理以使其可以写入到对应的所述多个底层XML文件中,并使用文件IO流的方式将处理后的真实数据写入到对应的所述多个底层XML文件中。
其中,数据源可以是数据库或者文件,当数据源是数据库时,使用SQL标签获取数据库中的真实数据,当数据源是文件时,使用File标签获取文件中的真实数据。SQL标签为用于指向数据库的组件,File标签为用于指向文件的组件。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种电子报表生成方法,其特征在于,所述方法包括:
获取所述电子报表对应的模板文件;
对所述模板文件进行解析,得到需进行修改的多个底层可扩展标记语言文件;
依据所述多个底层可扩展标记语言文件,对所述多个底层可扩展标记语言文件在程序中对应的基础类进行初始化,得到所述多个底层可扩展标记语言文件中的sheet.xml文件和sharedStrings.xml文件中指向数据的链接行,其中所述sheet.xml文件为电子表格中工作表的文件,所述sheet.xml文件存储有所述电子报表中数字类型的真实数据;sharedStrings.xml文件用于存储所述电子报表中字符串类型的真实数据;
获取其他底层可扩展标记语言文件的修改数据以及依据所述链接行中的每个组件获取所述sheet.xml文件和sharedStrings.xml文件中每个单元格所需的真实数据,其中每个组件用于指向所述电子报表中每个单元格所需数据;
使用文件输入输出流的方式将所述真实数据和所述修改数据写入到对应的所述多个底层可扩展标记语言文件中;
将写入数据的多个底层可扩展标记语言文件进行压缩,并将压缩后得到的压缩包的文件后缀名修改为所述电子报表对应的后缀名,以得到所述电子报表。
2.根据权利要求1所述的方法,其特征在于,所述使用文件输入输出流的方式将所述真实数据和所述修改数据写入到对应的所述多个底层可扩展标记语言文件中,包括:
将所述真实数据和所述修改数据写入到内存中;
当所述内存中所述数据的数据量大于第一预设值时,从所述内存中获取数据量为第二预设值的数据;
使用文件输入输出流的方式将从内存中获取的数据写入到对应的所述多个底层可扩展标记语言文件中。
3.根据权利要求1所述的方法,其特征在于,所述依据所述多个底层可扩展标记语言文件,对所述多个底层可扩展标记语言文件在程序中对应的基础类进行初始化,得到所述多个底层可扩展标记语言文件中的sheet.xml文件和sharedStrings.xml文件中指向数据的链接行,包括:
依据所述多个底层可扩展标记语言文件,对所述多个底层可扩展标记语言文件在程序中对应的基础类进行初始化,并采用自上而下的方式对sheet.xml文件和sharedStrings.xml文件中的组件进行处理,得到所述多个底层可扩展标记语言文件中的sheet.xml文件和sharedStrings.xml文件中指向数据的链接行。
4.根据权利要求1所述的方法,其特征在于,所述使用文件输入输出流的方式将所述真实数据写入到对应的所述多个底层可扩展标记语言文件中,包括:
判断从数据源获取到的真实数据是否可以直接写入对应的所述多个底层可扩展标记语言文件中;
如果是,使用文件输入输出流的方式将所述真实数据写入到对应的所述多个底层可扩展标记语言文件中;
如果否,对从数据源中获取的真实数据进行处理以使其可以写入到对应的所述多个底层可扩展标记语言文件中,并使用文件输入输出流的方式将处理后的真实数据写入到对应的所述多个底层可扩展标记语言文件中。
5.根据权利要求4所述的方法,其特征在于,当数据源是数据库时,使用SQL标签获取数据库中的真实数据,当数据源是文件时,使用File标签获取文件中的真实数据。
6.一种电子报表生成装置,其特征在于,所述装置包括:
第一获取单元,用于获取所述电子报表对应的模板文件;
解析单元,用于对所述模板文件进行解析,得到需进行修改的多个底层可扩展标记语言文件;
初始化单元,用于依据所述多个底层可扩展标记语言文件,对所述多个底层可扩展标记语言文件在程序中对应的基础类进行初始化,得到所述多个底层可扩展标记语言文件中的sheet.xml文件和sharedStrings.xml文件中指向数据的链接行,其中所述sheet.xml文件为电子表格中工作表的文件,所述sheet.xml文件存储有所述电子报表中数字类型的真实数据;sharedStrings.xml文件用于存储所述电子报表中字符串类型的真实数据;
第二获取单元,用于获取其他底层可扩展标记语言文件的修改数据以及依据所述链接行中的每个组件获取所述sheet.xml文件和sharedStrings.xml文件中每个单元格所需的真实数据,其中每个组件用于指向所述电子报表中每个单元格所需数据;
写入单元,用于使用文件输入输出流的方式将所述真实数据和所述修改数据写入到对应的所述多个底层可扩展标记语言文件中;
修改单元,用于将写入数据的多个底层可扩展标记语言文件进行压缩,并将压缩后得到的压缩包的文件后缀名修改为所述电子报表对应的后缀名,以得到所述电子报表。
7.根据权利要求6所述的装置,其特征在于,所述写入单元包括:
第一写入子单元,用于将所述真实数据和所述修改数据写入到内存中;
获取子单元,用于当所述内存中所述数据的数据量大于第一预设值时,从所述内存中获取数据量为第二预设值的数据;
第二写入子单元,用于使用文件输入输出流的方式将从内存中获取的数据写入到对应的所述多个底层可扩展标记语言文件中。
8.根据权利要求6所述的装置,其特征在于,所述初始化单元具体用于:依据所述多个底层可扩展标记语言文件,对所述多个底层可扩展标记语言文件在程序中对应的基础类进行初始化,并采用自上而下的方式对sheet.xml文件和sharedStrings.xml文件中的组件进行处理,得到所述多个底层可扩展标记语言文件中的sheet.xml文件和sharedStrings.xml文件中指向数据的链接行。
9.根据权利要求6所述的装置,其特征在于,所述写入单元包括:
判断子单元,用于判断从数据源获取到的真实数据是否可以直接写入对应的所述多个底层可扩展标记语言文件中;
第三写入子单元,用于当所述判断子单元判断从数据源获取到的真实数据可以直接写入对应的所述多个底层可扩展标记语言文件中时,使用文件输入输出流的方式将所述真实数据写入到对应的所述多个底层可扩展标记语言文件中;
处理子单元,用于当所述判断子单元判断从数据源获取到的真实数据不可以直接写入对应的所述多个底层可扩展标记语言文件中时,对从数据源中获取的真实数据进行处理以使其可以写入到对应的所述多个底层可扩展标记语言文件中,并使用文件输入输出流的方式将处理后的真实数据写入到对应的所述多个底层可扩展标记语言文件中。
10.根据权利要求9所述的装置,其特征在于,当数据源是数据库时,使用SQL标签获取数据库中的真实数据,当数据源是文件时,使用File标签获取文件中的真实数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510071247.7A CN104881275B (zh) | 2015-02-11 | 2015-02-11 | 一种电子报表生成方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510071247.7A CN104881275B (zh) | 2015-02-11 | 2015-02-11 | 一种电子报表生成方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104881275A CN104881275A (zh) | 2015-09-02 |
CN104881275B true CN104881275B (zh) | 2018-08-28 |
Family
ID=53948784
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510071247.7A Active CN104881275B (zh) | 2015-02-11 | 2015-02-11 | 一种电子报表生成方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104881275B (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106815182A (zh) * | 2015-11-27 | 2017-06-09 | 国家电网公司 | 一种基于excel下针对电网财务报表统计系统 |
CN105589840A (zh) * | 2015-12-15 | 2016-05-18 | 重庆腾帆科技有限公司 | 一种通用excel/pdf报表导出组件 |
CN105574164B (zh) * | 2015-12-16 | 2019-03-19 | 北京华傲达数据技术有限公司 | Excel文档的数据解析方法及装置 |
CN105391593A (zh) * | 2015-12-30 | 2016-03-09 | 迈普通信技术股份有限公司 | 一种报文传输方法及设备 |
CN105955944A (zh) * | 2016-05-09 | 2016-09-21 | 杭州艺豆网络科技有限公司 | 一种尺码表的生成方法 |
CN109254709A (zh) * | 2017-07-13 | 2019-01-22 | 阿里巴巴集团控股有限公司 | 截屏处理方法、装置、设备和机器可读介质 |
CN107885712A (zh) * | 2017-11-20 | 2018-04-06 | 浪潮金融信息技术有限公司 | 对接文档生成方法及装置、计算机存储介质和终端 |
CN108804401B (zh) * | 2018-06-14 | 2022-06-21 | 南京云帐房网络科技有限公司 | 一种报表模板的合并方法及装置 |
CN109783081A (zh) * | 2018-12-27 | 2019-05-21 | 百富计算机技术(深圳)有限公司 | 一种应用程序的开发方法、装置及集成开发工具 |
CN110321539A (zh) * | 2019-06-26 | 2019-10-11 | 成都科鸿智信科技有限公司 | 一种特种设备监管平台用报表工具 |
CN110457021B (zh) * | 2019-07-12 | 2023-05-16 | 招商局金融科技有限公司 | 指标数据处理方法、装置及计算机可读存储介质 |
CN110765741A (zh) * | 2019-09-09 | 2020-02-07 | 重庆金融资产交易所有限责任公司 | 数据处理的方法、装置、计算机设备和存储介质 |
CN110851173B (zh) * | 2019-11-18 | 2023-11-14 | 中国银行股份有限公司 | 报表生成方法及装置 |
CN112099801A (zh) * | 2020-11-03 | 2020-12-18 | 广州市玄武无线科技股份有限公司 | 一种基于元数据驱动的Excel解析方法及系统 |
CN114372448A (zh) * | 2021-12-09 | 2022-04-19 | 北京金山云网络技术有限公司 | 文档生成方法、装置、电子设备及计算机可读存储介质 |
CN114330268A (zh) * | 2021-12-09 | 2022-04-12 | 北京金山云网络技术有限公司 | 文档生成方法、装置、电子设备及计算机可读存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101650711A (zh) * | 2009-08-18 | 2010-02-17 | 深圳市科陆电子科技股份有限公司 | 一种报表的生成方法 |
CN102270224A (zh) * | 2011-06-28 | 2011-12-07 | 用友软件股份有限公司 | 信息系统数据输出装置和信息系统数据输出方法 |
CN102760118A (zh) * | 2011-04-25 | 2012-10-31 | 中兴通讯股份有限公司 | 一种将数据导出为Excel文件的方法及装置 |
CN103838740A (zh) * | 2012-11-21 | 2014-06-04 | 方欣科技有限公司 | 一种报表引擎方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120102385A1 (en) * | 2010-10-25 | 2012-04-26 | Konica Minolta Systems Laboratory Inc. | Determining heights of table cells |
-
2015
- 2015-02-11 CN CN201510071247.7A patent/CN104881275B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101650711A (zh) * | 2009-08-18 | 2010-02-17 | 深圳市科陆电子科技股份有限公司 | 一种报表的生成方法 |
CN102760118A (zh) * | 2011-04-25 | 2012-10-31 | 中兴通讯股份有限公司 | 一种将数据导出为Excel文件的方法及装置 |
CN102270224A (zh) * | 2011-06-28 | 2011-12-07 | 用友软件股份有限公司 | 信息系统数据输出装置和信息系统数据输出方法 |
CN103838740A (zh) * | 2012-11-21 | 2014-06-04 | 方欣科技有限公司 | 一种报表引擎方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104881275A (zh) | 2015-09-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104881275B (zh) | 一种电子报表生成方法及装置 | |
US7721195B2 (en) | RTF template and XSL/FO conversion: a new way to create computer reports | |
US8683324B2 (en) | Dynamic generation of target files from template files and tracking of the processing of target files | |
US8346803B2 (en) | Dynamic generation of target files from template files and tracking of the processing of target files | |
CN106293675B (zh) | 系统静态资源加载方法及装置 | |
US20040221233A1 (en) | Systems and methods for report design and generation | |
US20010014900A1 (en) | Method and system for separating content and layout of formatted objects | |
CN103309806B (zh) | 一种快速开发测试的装置及方法 | |
CN103136317A (zh) | 工程管理系统工程合同在线审批信息化实现方法 | |
CN101788994A (zh) | 一种数据展示模型建立方法、数据展示方法及装置 | |
CN112667720A (zh) | 接口数据模型的转化方法、装置、设备及存储介质 | |
CN113609820A (zh) | 基于可扩展标记语言文件生成word文件的方法、装置及设备 | |
CN106469140A (zh) | 一种报表生成系统及其方法 | |
CN111258577B (zh) | 页面渲染方法、装置、电子设备和存储介质 | |
CN112667563A (zh) | 一种文档管理及操作方法和系统 | |
CN116011400A (zh) | 一种项目标准测试文档自动化生成方法及装置 | |
CN108170409B (zh) | Web前端控件的开发方法和系统 | |
CN105589959A (zh) | 表单处理方法和表单系统 | |
CN113779953B (zh) | 一种文档自动化生成方法和系统 | |
CN113656000B (zh) | 网页的处理方法和装置 | |
CN114625792A (zh) | 数据库查询结果导出方法和导出装置 | |
US7873902B2 (en) | Transformation of versions of reports | |
CN112433995A (zh) | 文件格式转换方法、系统、计算机设备及存储介质 | |
JP4084049B2 (ja) | コンテンツデータ抽出・構造変換処理プログラム、コンテンツデータ抽出・構造変換処理プログラム記録媒体、およびコンテンツ再構築処理システム | |
CN113051266A (zh) | 数据处理方法、装置、计算机可读存储介质和计算机设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |