CN109829147B - 报表导出方法及装置 - Google Patents
报表导出方法及装置 Download PDFInfo
- Publication number
- CN109829147B CN109829147B CN201910097485.3A CN201910097485A CN109829147B CN 109829147 B CN109829147 B CN 109829147B CN 201910097485 A CN201910097485 A CN 201910097485A CN 109829147 B CN109829147 B CN 109829147B
- Authority
- CN
- China
- Prior art keywords
- control
- row
- data
- export
- data control
- 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
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明提供报表导出方法,该方法在接收到报表导出请求后,获得报表导出请求对应的报表模板;将各个数据控件的左边界在报表模板中的位置转换为在导出表格中的位置,以及将右边界在报表模板中的位置转换为在导出表格中的位置;根据各个数据控件的左边界和右边界在导出表格中的位置确定导出表格的各个列宽;根据各个数据控件的上边界在报表模板中的位置以及下边界在报表模板中的位置,确定导出表格的各个行高;依据各个列宽及各个行高切分出单元格,将各个数据控件添加至对应的单元格中,以导出表格。通过本报表导出方法,实现了数据控件的绝对定位,避免了报表位置失真的情况。本发明还提供了表格导出装置,以保证所述方法在实际中的应用及实现。
Description
技术领域
本发明涉及数据处理技术领域,特别是涉及一种报表导出方法及装置。
背景技术
工作中,人们经常使用报表反映工作信息,报表有各种形式如财务报表、仓库报表及统计报表等。报表是由设计人员通过设计器完成的,设计器的工具面板提供有各种形式的报表控件,设计人员通过将所需要的报表控件拖拽到所想要摆放的位置来设计报表模板。报表模板用于存储报表要展示的业务数据。包含有业务数据的报表模板可以称为业务报表,进一步可以简称为报表。
报表可以展示在报表系统中,但为了实现报表共享,除了可以在报表系统中展示报表外,还可以将报表导出。报表导出指的是,将业务报表保存为Excel(表格),表格中包含有报表模板中的所有报表控件,且需要保证报表控件在表格中的布局及大小与其在报表模板中的布局及大小一致,即需要保证样式一致。
目前的一种报表导出方法是,预先生成具有固定行高及列宽的表格,确定报表模板中的表格控件所对应的单元格,将表格控件填充在各自对应的单元格中。但是,该方式所导出的表格中,表格控件与报表模板中的表格控件样式不一致,导出准确性较差。
发明内容
基于上述技术的不足,本发明实施例提供一种报表导出方法,用以解决以像素为单位的控件导出至Excel中出现的位置失真的问题,实现控件的绝对定位。
为实现上述目的,本发明实施例提供如下技术方案:
第一方面,本发明提供了一种导出表格的生成方法,包括:
接收到报表导出请求后,获得所述报表导出请求对应的报表模板;其中所述报表模板中包含有多个数据控件;
依据预先设置的位置转换关系,将各个所述数据控件的左边界在报表模板中的位置转换为在导出表格中的位置,以及将各个所述数据控件的右边界在报表模板中的位置转换为在导出表格中的位置;
根据各个所述数据控件的左边界在导出表格中的位置及右边界在导出表格中的位置,确定所述导出表格的各个列宽;
根据各个所述数据控件的上边界在报表模板中的位置以及下边界在报表模板中的位置,确定所述导出表格的各个行高;
依据各个所述列宽及各个所述行高切分出所述导出表格的单元格,并将各个所述数据控件添加自身对应的单元格中,以导出表格。
第二方面,本发明提供了一种报表导出装置,包括:
获取单元,用于接收到报表导出请求后,获得所述报表导出请求对应的报表模板;其中所述报表模板中包含有多个数据控件;
转换单元,用于依据预先设置的位置转换关系,将各个所述数据控件的左边界在报表模板中的位置转换为在导出表格中的位置,以及将各个所述数据控件的右边界在报表模板中的位置转换为在导出表格中的位置;
确定列宽单元,用于根据各个所述数据控件的左边界在导出表格中的位置及右边界在导出表格中的位置,确定所述导出表格的各个列宽;
确定行高单元,用于根据各个所述数据控件的上边界在报表模板中的位置以及下边界在报表模板中的位置,确定所述导出表格的各个行高;
导出单元,用于依据各个所述列宽及各个所述行高切分出所述导出表格的单元格,并将各个所述数据控件添加自身对应的单元格中,以导出表格。
第三方面,本发明提供了一种报表导出设备,包括处理器和存储器,所述处理器通过运行存储在所述存储器内的软件程序、调用存储在所述存储器内的数据,至少执行如下步骤:
接收到报表导出请求后,获得所述报表导出请求对应的报表模板;其中所述报表模板中包含有多个数据控件;
依据预先设置的位置转换关系,将各个所述数据控件的左边界在报表模板中的位置转换为在导出表格中的位置,以及将各个所述数据控件的右边界在报表模板中的位置转换为在导出表格中的位置;
根据各个所述数据控件的左边界在导出表格中的位置及右边界在导出表格中的位置,确定所述导出表格的各个列宽;
根据各个所述数据控件的上边界在报表模板中的位置以及下边界在报表模板中的位置,确定所述导出表格的各个行高;
依据各个所述列宽及各个所述行高切分出所述导出表格的单元格,并将各个所述数据控件添加自身对应的单元格中,以导出表格。
第四方面,本发明提供了一种存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,实现上述任意一项所述的报表导出方法。
基于以上技术方案可以看出,本发明提供了一种报表导出方法,该方法接收报表导出请求,获得对应的报表模板,其中所述报表模板中包含有多个数据控件;通过确定数据控件在表格中的位置,计算出数据控件对应的列宽和行高,根据行高及列宽分割出单元格,并将数据控件添加在对应的单元格中,以完成表格导出。通过本发明提供的报表导出方法可以实现数据控件的绝对定位,避免了数据控件在表格中出现位置失真,相对于现有技术而言提高了报表导出准确性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例提供的一种报表导出方法的流程图;
图2为本发明实施例提供的一种导出表格的示意图;
图3为本发明实施例提供的一种报表导出装置的结构示意图;
图4为本发明实施例提供的一种报表导出设备的硬件结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本发明实施例提供一种报表导出方法,参见图1,具体包括以下步骤S101~S105。
S101、接收到报表导出请求后,获得报表导出请求对应的报表模板;其中报表模板中包含有多个数据控件。
具体地,用户登录报表系统,向报表系统发出报表导出请求;报表系统接收到用户的导出请求,根据用户的报表导出请求,在所设计的报表模板中,获得与报表导出请求对应的报表模板;其中,报表模板包含多个数据控件。
需要说明的是,数据控件是设计员在设计器中生成的,以拖拽的方式将数据控件设置于报表系统中的报表模板;报表模板中的数据控件可以包括表格控件、图片控件等多种类型的控件。其中,不同类型的控件对应不同的报表元素,如表格控件用于插入数据表格,图片控件用于添加图片内容。
S102、依据预先设置的位置转换关系,将各个数据控件的左边界在报表模板中的位置转换为在导出表格中的位置,以及将各个数据控件的右边界在报表模板中的位置转换为在导出表格中的位置。
具体地,为了将报表模板中的数据控件准确的导出至表格中,需要将数据控件的尺寸及位置进行转换。转换可以依赖位置转换关系,因此,本发明可以预先设置位置转换关系。本步骤中的位置转换关系,用于将数据控件在报表模板中的左边界及右边界的位置转换为各自在导出表格中的位置。
数据控件在报表模板中以像素为尺寸单位,经位置转换关系,得到数据控件在导出表格中的尺寸单位。其中,位置转换关系的一种具体形式如公式(1)所示:
W=k1*Px-k2(1)
公式来源于大量数据(excel宽度单位与像素的对应关系)找出的线性关系,数据来源于excel模板转换成网页,excel中有excel宽度单位信息,而网页中有像素信息。
其中k1与k2是线性关系系数,由于像素受硬件影响,系数也与硬件有关,在具体应用中k1的取值可以在30到33之间,K2的取值可以在52到54之间。
W表示数据控件的左边界或者右边界在导出表格中的位置;Px表示数据控件的左边界或者右边界在报表模板中的位置(位置单位是像素)。
S103、根据各个数据控件的左边界在导出表格中的位置及右边界在导出表格中的位置,确定导出表格的各个列宽。
具体地,步骤S102可以得到数据控件的左右两个边界在导出表格中的位置值,位置值是数据控件的左边界或右边界的位置到表格水平初始位置0的差值,因此右边界的位置值减去左边界的位置值,便可以得到数据控件在导出表格中的宽度,进而可以按照该宽度确定出该数据控件在导出表格中所对应的列宽。按照各个数据控件在导出表格中对应的列宽,便可以对导出表格进行分割。
在实际应用中,本步骤的一种具体实施方式包括:将所有数据控件的左边界在导出表格中的位置及右边界在导出表格中的位置作为一组列位置数值;去掉该组列位置数值中重复的列位置数值后进行排序,并计算排序后的所有相邻两个列位置数值之间的差值;将各个差值确定为导出表格的各个列宽。
其中,获得导出表格中每个数据控件的左边界和右边界的位置值之后,这些位置值不区分左边界的位置值及右边界的位置值,而是作为一组位置数值,由于该组位置数值用于计算列宽,因此这组位置数值称为列位置数值。
如果列位置数值中包含有相同的列位置数值,则进行去重操作。例如,控件A的左边界是200个excel宽度单位,控件B的右边界也是200个excel宽度单位,此时,控件A的左边界和控件B的右边界在导出表格中对应的列位置数值是相同的,两个数值只需要计算其中一个,丢弃另一个。
对去重后的列位置数值进行排序,然后将排序后相邻两个的列位置数值做差,所得差值即为导出表格的列宽。例如,排序后的列位置数值依次为0,2,6,7…50,53…,则单元格列宽度依次为2(2-0),4(6-2),1(7-6)…3(53-50)…。
在得到数据控件对应的列宽后,在导出表格中为对应的数据控件划分对应的列宽,该列宽用于设置单元格。
需要说明的是,在实际应用中,导出的表格中可能出现一种情况,即某一列的宽度过小,该列的存在会使得表格的浏览效果不佳,影响用户的浏览体验感受。因此可以考虑将该列删除,这样不仅可以减少导出表格的列数进而降低表格的数据量,而且提高表格的浏览效果,满足用户对浏览体验感受的需求。
为了实现以上技术效果,本步骤的一种具体实施方式为,若某一列差值小于预设列差值阈值,则删除某一列差值;以及将删除某一列差值的剩余列差值确定为导出表格的各个列宽。
具体地,预设列差值阈值是在导出表格中设置一个最小的列宽;当步骤S203确定导出表格中的各个列宽后,需要对确定的列宽进行判断,若某一列宽小于预设列差值阈值,则将该列宽所对应的列删除。如预设列差值阈值为2cm,当计算得到的列宽小于2cm时,删除该列。删除该列即表示将该列与该列的前一列合并。需要说明的是,对于后续步骤所划分的行也可以此处的合并处理。
S104、根据各个数据控件的上边界在报表模板中的位置以及下边界在报表模板中的位置,确定导出表格的各个行高。
具体地,除了可以获得数据控件的左右边界在报表模板中的位置,还可以获得数据控件的上下边界在报表模板中的位置。根据位置转换关系,可以确定出数据控件的上下边界在导出表格中的位置,进而根据数据控件的上下边界在导出表格中的位置,来确定导出表格的行高。需要说明的是,此处的位置转换关系是像素转excel的高度单位,与S102中的转换关系(像素转excel宽度单位)不同,具体公式见下文公式(2)。
在实际应用中,根据数据控件的上下边界在导出表格中的位置,来确定导出表格行高的具体方式可以有多种。
例如,一种具体方式为,根据数据控件的上下边界在导出表格中的位置确定出数据控件在导出表格中的高度;在导出表格中划分具有默认高度的行;确定每个数据控件所对应的行,若数据控件对应行的默认高度与数据控件在导出表格中的高度不同,则依据数据控件在导出表格中的高度重新切割数据控件对应的行高。
又如,另一种确定导出表格行高的方式为,根据数据控件的上下边界在导出表格中的位置确定出数据控件在导出表格中的高度;根据数据控件的上下边界在导出表格中的位置以及数据控件的高度,确定导出表格中的行高。
需要说明的是,数据控件可以包括表格控件,表格控件在报表模板中的展示样式可能不同。表格控件的展示样式会影响其他数据控件具体是表格控件下方的其他数据控件在导出表格中的位置,因此基于表格控件的体现样式的不同,需要使用不同的方式来根据数据控件在导出表格中的位置确定导出表格的行高。具体到以上两种确定方式,可以认为表格控件的下方不存在其他数据控件,至于表格控件的下方存在其他数据控件的情况,以下将具体说明如何确定导出表格的行高。
对表格控件的展示样式进行说明。表格控件的展示样式不同具体指的是表格控件在报表模板中是否完整展示。一种情况是,表格控件在报表模板中完整展示,即表格控件会根据需要存放的数据记录的条数,来相应设置数量的行用于存放这些条数的数据记录。另一种情况是,表格控件在报表模板中并未完整展示,即表格控件只展示了表头及一行表格,在业务调用过程中,依次添加表格行,并将依次读取到的数据记录添加到表格行中。至于表格控件未完整展示的情况,以下具体说明,此处并不赘述。
S105、依据各个列宽及各个行高切分出导出表格的单元格,并将各个数据控件添加自身对应的单元格中,以导出表格。
具体地,根据列宽及行高可以在导出表格中切分出单元格,数据控件可以添加至自身所对应的单元格中。在表格中添加上数据控件之后,便可以认为生成了导出表格。
需要说明的是,切分行及列的顺序并不具体限定,例如可以先按照行高切分行再按照列宽切分列,又如可以先按照列宽切分列再按照行高切分行。另外,切分单元格与添加数据控件的顺序也并不做具体限定,可以一边切分单元格,一边将数据控件添加至单元格中,也可以在切分出所有的单元格之后,再添加数据控件。
由以上技术方案可知,本发明提供了一种报表导出方法,该方法接收报表导出请求,获得对应的报表模板,其中所述报表模板中包含有多个数据控件;通过确定数据控件在表格中的位置,计算出数据控件对应的列宽和行高,根据行高及列宽分割出单元格,并将数据控件添加在对应的单元格中,以完成表格导出。通过本发明提供的报表导出方法可以实现数据控件的绝对定位,避免了数据控件在表格中出现位置失真,相对于现有技术而言提高了报表导出准确性。
具体而言,现有技术中一种表格导出方式是,设置默认宽度的行及列,将所有的表格控件都放置在默认单元格中,这种方式是数据控件去适应单元格,而非单元格去适应表格控件,如果数据控件的行高或者高度并不能占据单元格的全部,则需要将数据控件拉伸或者压缩,以使数据控件能填充完整个数的单元格。这种方式会导致数据控件的长宽比例失真,导致报表导出的数据控件与开发人员所设计的报表模板不同,报表导出不准确。然而,本发明提供的报表导出方法可以根据数据控件自身的高宽及宽度来设置导出表格的行高及列宽,以使该行高及列宽所设置的单元格能够适应数据控件的尺寸,从而保证了报表导出的准确度。
虽然现有技术中可以将导出表格列及行的默认宽度设置为可以实现的最小值,即尽量将行及列设置为最小值,但以上问题没有从根本上得到解决。本发明提供的表格导出方法却可以避免上述问题的发生。
设置默认宽度的行及列的表格导出方式,还存在其他技术问题,即会导致列或行的数量较多。虽然可以在添加表格控件后,合并数据控件与数据控件之间的空白列或行,来减少不必要存在的列或行,但是这种方式会导致导出表格的效率较低,在导出表格的数据量较大的情况下,可能出现明显的卡顿现象。
发明人对效率较低的技术问题进行研究后,发现导致该技术问题的原因是,这种方式需要首先按照默认宽度切分出导出表格的所有列及所有行,再向单元格中添加数据控件,再查找所有数据控件之间的空白行及空白列,然后再对空白行及空白列进行合并。该流程可以大致划分为切分、查找空白行及合并三个步骤,其中查找空白行的步骤与本发明中依据表格控件的边界值确定行高及列宽的步骤大致相同,都需要包含排序及作差的步骤,因此与本发明提供的表格导出方法相比,现有的表格导出方式虽然可以通过合并空白行来减少不必要的列及行,但却比本发明提供的表格导出方法多出切分及合并的两个步骤,这些步骤的处理会影响表格的导出效率,换句话说,本发明提供的表格导出方法中不包含该两个步骤,因此表格的导出效率较高。
在实际应用中,数据控件包括表格控件与普通控件,表格控件包括表头控件及记录控件,如图2所示,汽车分期利率对比表、作者、日期控件均为普通控件,下方的表格为表格控件,表格的第一行为表头控件,表格的其他行为记录控件,且在导出表格的行方向上表格控件的下方可能存在其他数据控件,也可能不存在其他数据控件。其中行方向指的是导出表格中的行的排列方向,简单来说是导出表格从上到下的方向。
需要说明的是,在两种不同场景下,步骤S104(根据各个数据控件的上边界在报表模板中的位置以及下边界在报表模板中的位置,确定导出表格的各个行高)的具体实现方式是不同的。本发明针对这两个不同的场景,对步骤S104确定行高的具体实现方式进行说明。
第一种场景,表格控件的下方不存在其他数据控件。
在该场景下,步骤S104(根据各个数据控件的上边界在报表模板中的位置以及下边界在报表模板中的位置,确定导出表格的各个行高)的一种具体实施方式包括如下步骤A1~A2。
A1:针对记录控件之外的其他数据控件,依据预先设置的位置转换关系,将其他数据控件的上边界在报表模板中的位置转换为在导出表格中的位置,以及将各个其他数据控件的下边界在报表模板中的位置转换为在导出表格中的位置;将其他数据控件上边界在导出表格中的位置及下边界在导出表格中的位置作为一组行位置数值,去掉该组行位置数值中的重复行位置数值后进行排序,计算排序后的所有相邻两个行位置数值之间的差值,并将各个差值确定为导出表格的行高。
具体地,为了保证本发明在实际中的实施,预先设置位置转换关系。本步骤的位置转换关系,用于将数据控件在报表模板中的上边界及下边界的位置转换为各自在导出表格中的位置。数据控件在报表模板中以像素为尺寸单位,其中数据控件在报表模板中的上边界及下边界的位置,经位置转换关系,可参照公式(2)计算得到数据控件在导出表格中的上边界及下边界的位置。
H=Px÷dpi×72×20(2)
其中,H是数据控件在导出表格中的位置;Px是数据控件在报表模板中的位置;dpi为1英寸可显示的像素点个数,普通的windows电脑一般为96dpi,72磅=1英寸(Excel高度单位为磅),1磅=20缇(poi高度单位是缇twip)。
在得到数据控件的上下边界在导出表格中的位置之后,按照上述左右边界的位置处理方式,可以得到导出表格的行高,具体的处理过程可以参照上述关于左右边界的位置处理方式,此处并不赘述。
A2:针对记录控件,获得记录控件在导出表格中的高度;从预设数据库中读取记录控件对应的所有数据记录,并统计数据记录的条数;根据记录控件在导出表格中的高度,在导出表格中添加与条数相同数量的行;其中各个添加行的行高均为记录控件在导出表格中的高度。
具体地,记录控件在导出表格中高度的计算方式为,使用记录控件的下边界在导出表格中的位置减去上边界在导出表格中的位置,得到的差值即记录控件在导出表格中的高度。
由于报表模板中的记录控件只设置了一行,作为模板参考行,在实际应用中,记录控件从预设数据库中读取数据记录,所读取的数据记录应为多条。在导出表格中,记录控件与读取的数据记录条数一样多,且每一行记录控件的行高均与记录控件的模板参考行的行高一致。
例如,在报表系统中导出财务报表模板,财务报表模板的表格控件只设置了一行记录控件,先读取财务系统中某月份员工工资发放的数据记录,在导出表格中,根据该数据记录添加记录控件的行数,每增加一条记录,记录控件行数加一,直至数据读取完毕,导出表格完成行数的添加。
第二种应用场景,表格控件的下方存在其他数据控件。
需要说明的是,在这种应用场景中,表格控件包括表头控件以及记录控件,虽然表头控件在导出表格中是位置固定的数据控件,但是记录控件是可以添加多条记录的控件,会随着数据记录的增多而变化,可见记录控件属于位置可变的记录控件。由于记录控件的可变性,对于记录控件下方的数据控件来说,这些数据控件在报表模板中的位置不能直接对应到导出表格中的位置,因此需要以记录控件为划分线,需要分别以及记录控件上方的数据控件、记录控件、记录控件下方的数据控件来确定导出表格的行高。
在该场景下,步骤S104(根据各个数据控件的上边界在报表模板中的位置以及下边界在报表模板中的位置,确定导出表格的各个行高)的一种具体实施方式包括如下步骤B1~B3。
B1:针对行方向上在记录控件之上的第一类数据控件,依据预先设置的位置转换关系,将第一类数据控件的上边界在报表模板中的位置转换为在导出表格中的位置,以及将各个第一类数据控件的下边界在报表模板中的位置转换为在导出表格中的位置;将第一类数据控件上边界在导出表格中的位置及下边界在导出表格中的位置作为一组行位置数值,去掉该组行位置数值中的重复行位置数值后进行排序,计算排序后的所有相邻两个行位置数值之间的差值,并将各个差值确定为导出表格的行高。
其中,按照与记录控件的位置关系将数据控件划分为三类,即记录控件之上的数据控件(第一类数据控件)、记录控件、记录控件之下的数据控件(第二类数据控件)。针对不同类型的数据控件,使用不同的方式来确定各自在导出表格中对应的行高。
B2:针对记录控件,获得记录控件在导出表格中的高度;从预设数据库中读取记录控件对应的所有数据记录,并统计数据记录的条数;根据记录控件在导出表格中的高度,在导出表格中添加与条数相同数量的行;其中各个添加行在导出表格中的行高均为记录控件在导出表格中的高度。
其中,由于第一类数据控件以及记录控件的位置并不会因为数据记录的添加而发生变化,因此关于以上步骤B1及B2的说明可参见上述第一种场景中的相关说明,此处不再赘述。
B3:针对行方向上在记录控件之下的第二类数据控件,依据预先设置的位置转换关系,将第二类数据控件的上边界在报表模板中的位置转换为在导出表格中的原始位置,以及将各个第二类数据控件的下边界在报表模板中的位置转换为在导出表格中的原始位置;计算添加行的数量与行高的乘积值;将第二类数据控件的上边界的原始位置加上乘积值,得到上边界在导出表格中的实际位置;将第二类数据控件的下边界的原始位置加上乘积值,得到下边界在导出表格中的实际位置;将第二类数据控件上边界的实际位置及下边界的实际位置作为一组行位置数值,去掉该组行位置数值中的重复行位置数值后进行排序,计算排序后的所有相邻两个行位置数值之间的差值,并将各个差值确定为导出表格的行高。
具体地,由于第二类数据控件以及记录控件的位置会因为数据记录的添加而发生变化,例如,每当记录控件添加一条记录时,第二类数控控件在原来的行数上进行加一,表示向下平移一行,以此类推,当记录控件添加了N条数据记录,此时的第二类数据控件即在原来位置的基础上,向下平移了N行。
因此,在步骤B2添加数据记录之后,根据所添加的数据记录占据的行高总高度,来调整第二类数据控件在导出表格中的位置。具体地,将数据记录的总条数乘以记录控件的宽度得到行高总高度,将第二类数据控件的上下边界的位置分别加上该行高总高度,便可以得到调整之后的位置。调整之后的位置便可以同样按照以上通过排序作差来确定行高的方式,来确定第二类数据控件对应行的行高。
以上是表格控件下方有其他数据控件的应用场景下,划分导出表格的行高的一种实现方式。在以上的实现方式中,导出表格的行高并没有默认宽度,是直接根据数据控件的宽度来划分的。以下还提供另一种实现方式,即可以对导出表格的行进行初始划分,使得导出表格具有默认行高,然后再根据数据控件的高度调整默认行高。具体的实现过程如下所示。需要说明的是,以下实现过程中,如何确定数据控件在导出表格的高度以及如何读取数据记录步骤与上述实现方式是相同的,可以参见上述实现方式的说明,以下并不赘述。
在第二种应用场景下,步骤S104(根据各个数据控件的上边界在报表模板中的位置以及下边界在报表模板中的位置,确定导出表格的各个行高)的一种具体实施方式包括如下步骤C1~C4。
C1:获得所述导出表格的默认行高。
具体地,导出表格的默认行高是预先设置的,可以是Excel的默认行高,也可以是设置的比该默认行高小的数值,具体数据本发明并不做具体限定。
C2:针对行方向上在所述记录控件之上的第一类数据控件,依据预先设置的位置转换关系,将各个所述第一类数据控件的上边界在报表模板中的位置转换为在导出表格中的位置,以及将各个所述第一类数据控件的下边界在报表模板中的位置转换为在导出表格中的位置;根据所述第一类数据控件上边界在导出表格中的位置及下边界在导出表格中的位置确定所述第一类数据控件对应的行;若所述第一类数据控件对应的行并非完整倍数的行,则调整所述第一类数据控件对应的行的行高,以使所述第一类数据控件对应的行是完整倍数的行。
具体地,确定第一类数据控件的上下边界在导出表格中的位置之后,根据该位置与各个默认行的临近关系,可以确定出第一类数据控件在导出表格中所对应的行。临近关系指的是,第一类数据控件的上边界的位置与行的起始位置的差值在预设范围内,当然也可以是第一类数据控件的下边界的位置与行的结束位置的差值在预设范围内。需要说明的是,其他步骤中为数据控件确定对应的行,或者为数据控件确定对应的列也可以按照临近关系的方式确定。
第一类数据控件对应的行可能是一行,也可能是多行。确定出第一类数据控件对应的行之后,如果该(些)行并非完整倍数的行,如第一类数据控件对应的行是从第22行的中央到第25行的三分之一处,则需要根据第一类数据控件的高度调整所对应的行的高度。具体地,若对应的行为一行,则将该一行的高度调整为第一类数据控件的高度;若对应的行为多行,则将多行合并为一行并将该行的高度调整为第一类数据控件的高度。需要说明的是,调整行高时,并不会改变第一类数据控件在导出表格中的位置,从而可以知道的是,对该行行高的调整,会导致上下行位置的变化。另外需要说明的是,其他步骤中对行或列的调整同样按照这种方式,其他步骤中并不赘述。
另外,任一第一类数据控件对应的行如果是多个则可以合并为一行。同样,任一第二类数据控件对应的行如果是多个也可以合并为一行。
C3:针对所述记录控件,获得所述记录控件在导出表格中的高度;从预设数据库中读取所述记录控件对应的所有数据记录;针对每一条数据记录,在所述导出表格中确定与所述数据记录对应的行,若所述记录控件的高度与所述默认行高不同,则将所述数据记录对应的行的默认行高调整为所述记录控件的高度。
具体地,由于表格控件中的记录控件仅仅是一行,则需要从第三方数据库等单元中读取与该表格控件对应的数据记录。每读取一条数据记录,则需要在导出表格为该条数据记录确定其所对应的行。可以理解的是,数据记录存放在表格控件的记录控件中,因此读取第一条数据记录后,将其放置在表格控件的第一个记录控件中,读取第二条数据记录后,在第一个记录控件的下方添加一个记录控件,以此类推,直至为最后一条数据记录添加记录控件。每一个添加的记录控件均对应一行,如果行的默认宽度与记录控件在导出表格中的高度不同,则同样需要调整默认行高,以使默认行高与记录控件的高度相同。
C4:针对行方向上在所述记录控件之下的第二类数据控件,依据预先设置的位置转换关系,将所述第二类数据控件的上边界在报表模板中的位置转换为在导出表格中的原始位置,以及将各个所述第二类数据控件的下边界在报表模板中的位置转换为在导出表格中的原始位置;计算所述添加行的数量与所述行高的乘积值;将所述第二类数据控件的上边界的原始位置加上所述乘积值,得到上边界在导出表格中的实际位置;将所述第二类数据控件的下边界的原始位置加上所述乘积值,得到下边界在导出表格中的实际位置;根据所述第二类数据控件上边界在导出表格中的实际位置及下边界在导出表格中的实际位置确定所述第二类数据控件对应的行;若所述第二类数据控件对应的行并非完整倍数的行,则调整所述第二类数据控件对应的行的行高,以使所述第二类数据控件对应的行是完整倍数的行。
具体地,本步骤是对记录控件下方的数据控件进行处理,即将记录控件下方的数据控件所对应的行的默认行高调整为数据控件的高度。
与步骤C1不同的是,根据位置转换关系确定出第二类数据控件在导出表格中的位置后,该位置并非第二类数据控件在导出表格中的真实位置,由于所添加的数据记录的存在,需要将所转换的位置下移,下移的长度为所有数据记录在导出表格中占据的高度。然后根据位置下移之后的位置,来调整行的默认行高。其中,为了便于描述,将第二类数据控件位置下移之前的位置称为原始位置,将下移之后的位置称为实际位置。
由以上技术方案可以看出,对于导出表格行高的设置可以至少包括以上两种实现形式。需要说明的是,在按照上述方式得到行高之后,还可以将没有包含数据控件的空白行合并,以减少行的个数。合并空白行不仅可以降低导出表格的数据量,而且使得导出表格在浏览效果上更佳。
需要说明的是,数据控件可以包含悬浮类数据控件,悬浮类数据控件是可以悬浮在其他数据控件上一层的数据控件,在导出表格中的位置可以与其他数据控件重合,因此对于悬浮类数据控件并不做特殊说明,其对应的行高及列宽可以按照上述任一种方式实现。
为了便于理解本发明的技术方案所导出表格的情况,结合图2提供的一个导出表格效果示例图进行直观说明。如图2所示,该导出表格中包含有5个数据控件,分别为4个普通控件及1个表格控件。其中4个普通控件分别为:汽车分期利率对比表控件、作者控件、产地控件以及日期控件。
从图2中可以看出,每个数据控件对应的行为一个完整的行,行的高度与数据控件的高度相同,且数据控件之间间隔的空白行为合并的一行。另外,每个数据控件对应的列均为完整倍数的列,如汽车分期利率对比表控件对应的列为从E列到I列的五列。为了进一步减少列的个数,可以将宽度小于阈值的F列删除,如将F列与E列合并。
导出这种形式的表格不仅符合人的浏览习惯,使得表格的浏览效果较佳,且表格的数据量较小,导出效率也较高。
参见图3,本发明实施例提供了一种报表导出装置的结构。如图3所示,该装置可以具体包括:获取单元301、转换单元302、确定列宽单元303、确定行高单元304以及导出单元305。
获取单元301,用于接收到报表导出请求后,获得报表导出请求对应的报表模板;其中报表模板中包含有多个数据控件。
转换单元302,用于依据预先设置的位置转换关系,将各个数据控件的左边界在报表模板中的位置转换为在导出表格中的位置,以及将各个数据控件的右边界在报表模板中的位置转换为在导出表格中的位置。
确定列宽单元303,用于根据各个数据控件的左边界在导出表格中的位置及右边界在导出表格中的位置,确定导出表格的各个列宽。
确定行高单元304,用于根据各个数据控件的上边界在报表模板中的位置以及下边界在报表模板中的位置,确定导出表格的各个行高。
导出单元305,用于依据各个列宽及各个行高切分出导出表格的单元格,并将各个数据控件添加自身对应的单元格中,以导出表格。
由以上技术方案可知,本发明提供了一种报表导出装置,该装置接收报表导出请求,获得对应的报表模板,其中,报表模板中包含有多个数据控件;通过确定数据控件在表格中的位置,计算出数据控件对应的列宽和行高,在进行单元格合并。完成表格导出。通过提供的方法可以实现控件的绝对定位,避免了数据控件在表格中出现位置失真,相对于现有技术而言提高了效率。
在一种实现方式中,确定列宽单元303可以具体包括:数值生成单元、数值处理单元以及生成列宽单元。
数值生成单元,用于将所有数据控件的左边界在导出表格中的位置及右边界在导出表格中的位置作为一组列位置数值。
数值处理单元,用于去掉该组列位置数值中的重复列位置数值后进行排序,并计算排序后的所有相邻两个列位置数值之间的差值。
生成列宽单元,用于将各个差值确定为导出表格的各个列宽。
在一种实现方式中,生成列宽单元可以具体包括:阈值判断子单元以及生成列宽子单元。
阈值判断子单元,用于判断列差值,若某一列差值小于预设列差值阈值,则删除某一列差值。
生成列宽子单元,用于将删除某一列差值的剩余列差值确定为导出表格的各个列宽。
在一种实现方式中,获取单元301所获得的报表模板中的数据控件包括表格控件,所述表格控件包括表头控件及记录控件,且在导出表格的行方向上所述表格控件的下方不存在数据控件;则所述确定行高单元304包括:第一确定行高单以及第二确定行高单元。
第一确定行高单元,用于针对所述记录控件之外的其他数据控件,依据预先设置的位置转换关系,将所述其他数据控件的上边界在报表模板中的位置转换为在导出表格中的位置,以及将各个所述其他数据控件的下边界在报表模板中的位置转换为在导出表格中的位置;将所述其他数据控件上边界在导出表格中的位置及下边界在导出表格中的位置作为一组行位置数值,去掉该组行位置数值中的重复行位置数值后进行排序,计算排序后的所有相邻两个行位置数值之间的差值,并将各个所述差值确定为所述导出表格的行高;
第二确定行高单元,用于针对所述记录控件,获得所述记录控件在导出表格中的高度;从预设数据库中读取所述记录控件对应的所有数据记录,并统计数据记录的条数;根据所述记录控件在导出表格中的高度,在所述导出表格中添加与所述条数相同数量的行;其中各个添加行的行高均为所述记录控件在导出表格中的高度。
在一种实现方式中,获取单元301所获得的报表模板中的数据控件包括表格控件,所述表格控件包括表头控件及记录控件,且在行方向上所述表格控件的下方存在数据控件;则所述确定行高单元304包括:第三确定行高单元、第四确定行高单元以及第五确定行高单元。
第三确定行高单元,用于针对行方向上在所述记录控件之上的第一类数据控件,依据预先设置的位置转换关系,将所述第一类数据控件的上边界在报表模板中的位置转换为在导出表格中的位置,以及将各个所述第一类数据控件的下边界在报表模板中的位置转换为在导出表格中的位置;将所述第一类数据控件上边界在导出表格中的位置及下边界在导出表格中的位置作为一组行位置数值,去掉该组行位置数值中的重复行位置数值后进行排序,计算排序后的所有相邻两个行位置数值之间的差值,并将各个所述差值确定为所述导出表格的行高;
第四确定行高单元,用于针对所述记录控件,获得所述记录控件在导出表格中的高度;从预设数据库中读取所述记录控件对应的所有数据记录,并统计数据记录的条数;根据所述记录控件在导出表格中的高度,在所述导出表格中添加与所述条数相同数量的行;其中各个添加行在所述导出表格中的行高均为所述记录控件在所述导出表格中的高度。
第五确定行高单元,用于针对行方向上在所述记录控件之下的第二类数据控件,依据预先设置的位置转换关系,将所述第二类数据控件的上边界在报表模板中的位置转换为在导出表格中的原始位置,以及将各个所述第二类数据控件的下边界在报表模板中的位置转换为在导出表格中的原始位置;计算所述添加行的数量与所述行高的乘积值;将所述第二类数据控件的上边界的原始位置加上所述乘积值,得到上边界在导出表格中的实际位置;将所述第二类数据控件的下边界的原始位置加上所述乘积值,得到下边界在导出表格中的实际位置;将所述第二类数据控件上边界的实际位置及下边界的实际位置作为一组行位置数值,去掉该组行位置数值中的重复行位置数值后进行排序,计算排序后的所有相邻两个行位置数值之间的差值,并将各个所述差值确定为所述导出表格的行高。
在一种实现方式中,获取单元301所获得的报表模板中的数据控件包括表格控件,所述表格控件包括表头控件及记录控件,且在行方向上所述表格控件的下方存在数据控件;则所述确定行高单元304包括:
默认行高获得单元,用于获得所述导出表格的默认行高;
第六确定行高单元,用于针对行方向上在所述记录控件之上的第一类数据控件,依据预先设置的位置转换关系,将各个所述第一类数据控件的上边界在报表模板中的位置转换为在导出表格中的位置,以及将各个所述第一类数据控件的下边界在报表模板中的位置转换为在导出表格中的位置;根据所述第一类数据控件上边界在导出表格中的位置及下边界在导出表格中的位置确定所述第一类数据控件对应的行;若所述第一类数据控件对应的行并非完整倍数的行,则调整所述第一类数据控件对应的行的行高,以使所述第一类数据控件对应的行是完整倍数的行;
第七确定行高单元,用于针对所述记录控件,获得所述记录控件在导出表格中的高度;从预设数据库中读取所述记录控件对应的所有数据记录;针对每一条数据记录,在所述导出表格中确定与所述数据记录对应的行,若所述记录控件的高度与所述默认行高不同,则将所述数据记录对应的行的默认行高调整为所述记录控件的高度;
第八确定行高单元,用于针对行方向上在所述记录控件之下的第二类数据控件,依据预先设置的位置转换关系,将所述第二类数据控件的上边界在报表模板中的位置转换为在导出表格中的原始位置,以及将各个所述第二类数据控件的下边界在报表模板中的位置转换为在导出表格中的原始位置;计算所述添加行的数量与所述行高的乘积值;将所述第二类数据控件的上边界的原始位置加上所述乘积值,得到上边界在导出表格中的实际位置;将所述第二类数据控件的下边界的原始位置加上所述乘积值,得到下边界在导出表格中的实际位置;根据所述第二类数据控件上边界在导出表格中的实际位置及下边界在导出表格中的实际位置确定所述第二类数据控件对应的行;若所述第二类数据控件对应的行并非完整倍数的行,则调整所述第二类数据控件对应的行的行高,以使所述第二类数据控件对应的行是完整倍数的行。
在一种实现方式中,转换单元302所使用的位置转换关系为:W=k1*Px-k2;其中所述W表示数据控件的左边界或者右边界在导出表格中的位置,所述Px表示数据控件的左边界或者右边界在报表模板中的位置,所述k1及k2表示预设的线性关系系数。
见图4,其示出了本申请提供的一种报表导出设备,具体包括:存储器401、处理器402及通信总线403。
其中,存储器401、处理器402通过通信总线403完成相互间的通信。
存储器401,用于存放程序;存储器401可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。
处理器402,用于执行程序,程序可以包括程序代码,所述程序代码包括处理器的操作指令。其中,程序可具体用于:
接收到报表导出请求后,获得所述报表导出请求对应的报表模板;其中所述报表模板中包含有多个数据控件;
依据预先设置的位置转换关系,将各个所述数据控件的左边界在报表模板中的位置转换为在导出表格中的位置,以及将各个所述数据控件的右边界在报表模板中的位置转换为在导出表格中的位置;
根据各个所述数据控件的左边界在导出表格中的位置及右边界在导出表格中的位置,确定所述导出表格的各个列宽;
根据各个所述数据控件的上边界在报表模板中的位置以及下边界在报表模板中的位置,确定所述导出表格的各个行高;
依据各个所述列宽及各个所述行高切分出所述导出表格的单元格,并将各个所述数据控件添加自身对应的单元格中,以导出表格。
处理器402可能是一个中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecificIntegratedCircuit),或者是被配置成实施本申请实施例的一个或多个集成电路。
需要说明的是,所述处理器可以执行与上述报表导出方法相关的各个步骤,此处并不赘述。
本申请还提供了一种可读存储介质,其上存储有计算机程序,所述计算机程序可以被处理器执行,以实现以上各个报表导出方法实施例中的各个步骤。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (12)
1.一种报表导出方法,其特征在于,包括:
接收到报表导出请求后,获得所述报表导出请求对应的报表模板;其中所述报表模板中包含有多个数据控件;所述数据控件包括表格控件;所述表格控件的展示样式会影响其他数据控件,具体是所述表格控件下方的其他数据控件在导出表格中的位置;不同体现样式的所述表格控件,需要使用不同的方式来根据所述数据控件在导出表格中的位置导出表格的行高;
依据预先设置的位置转换关系,将各个所述数据控件的左边界在所述报表模板中的位置转换为在导出表格中的位置,以及将各个所述数据控件的右边界在所述报表模板中的位置转换为在导出表格中的位置;
将所有所述数据控件的左边界在导出表格中的位置及右边界在导出表格中的位置作为一组列位置数值;去掉该组列位置数值中重复的列位置数值后进行排序,并计算排序后的所有相邻两个列位置数值之间的差值;判断各个所述差值是否小于预设列差值阈值,若某一列差值小于所述预设列差值阈值,则删除所述某一列差值;将删除所述某一列差值的剩余列差值确定为导出表格的各个列宽;
在两个不同的场景中,根据各个所述数据控件的上边界在所述报表模板中的位置以及下边界在所述报表模板中的位置,确定导出表格的各个行高,包括:第一种场景,所述表格控件的下方不存在其他数据控件时,针对记录控件之外的其他数据控件和记录控件采用不同的转换方式;第二种场景,所述表格控件的下方存在其他数据控件时,针对行方向上在记录控件之上的第一类数据控件、记录控件以及行方向上在记录控件之下的第二类数据控件采用不同的转换方式;
依据各个所述列宽及各个所述行高切分出导出表格的单元格,并将各个所述数据控件添加到自身对应的单元格中,以导出表格。
2.根据权利要求1所述的报表导出方法,其特征在于,所述表格控件包括表头控件及所述记录控件;所述表格控件的下方不存在其他数据控件时,针对所述记录控件之外的其他数据控件和所述记录控件采用不同的转换方式,包括:
针对所述记录控件之外的其他数据控件,依据预先设置的位置转换关系,将所述其他数据控件的上边界在报表模板中的位置转换为在导出表格中的位置,以及将各个所述其他数据控件的下边界在报表模板中的位置转换为在导出表格中的位置;将所述其他数据控件上边界在导出表格中的位置及下边界在导出表格中的位置作为一组行位置数值,去掉该组行位置数值中的重复行位置数值后进行排序,计算排序后的所有相邻两个行位置数值之间的差值,并将各个所述差值确定为所述导出表格的行高;
针对所述记录控件,获得所述记录控件在导出表格中的高度;从预设数据库中读取所述记录控件对应的所有数据记录,并统计数据记录的条数;根据所述记录控件在导出表格中的高度,在所述导出表格中添加与所述条数相同数量的行;其中各个添加行的行高均为所述记录控件在导出表格中的高度。
3.根据权利要求1所述的报表导出方法,其特征在于,所述表格控件包括表头控件及所述记录控件;所述表格控件的下方存在其他数据控件时,针对行方向上在所述记录控件之上的第一类数据控件、所述记录控件以及行方向上在所述记录控件之下的第二类数据控件采用不同的转换方式,包括:
针对行方向上在所述记录控件之上的第一类数据控件,依据预先设置的位置转换关系,将所述第一类数据控件的上边界在报表模板中的位置转换为在导出表格中的位置,以及将各个所述第一类数据控件的下边界在报表模板中的位置转换为在导出表格中的位置;将所述第一类数据控件上边界在导出表格中的位置及下边界在导出表格中的位置作为一组行位置数值,去掉该组行位置数值中的重复行位置数值后进行排序,计算排序后的所有相邻两个行位置数值之间的差值,并将各个所述差值确定为所述导出表格的行高;
针对所述记录控件,获得所述记录控件在导出表格中的高度;从预设数据库中读取所述记录控件对应的所有数据记录,并统计数据记录的条数;根据所述记录控件在导出表格中的高度,在所述导出表格中添加与所述条数相同数量的行;其中各个添加行在所述导出表格中的行高均为所述记录控件在所述导出表格中的高度;
针对行方向上在所述记录控件之下的第二类数据控件,依据预先设置的位置转换关系,将所述第二类数据控件的上边界在报表模板中的位置转换为在导出表格中的原始位置,以及将各个所述第二类数据控件的下边界在报表模板中的位置转换为在导出表格中的原始位置;计算所述添加行的数量与所述行高的乘积值;将所述第二类数据控件的上边界的原始位置加上所述乘积值,得到上边界在导出表格中的实际位置;将所述第二类数据控件的下边界的原始位置加上所述乘积值,得到下边界在导出表格中的实际位置;将所述第二类数据控件上边界的实际位置及下边界的实际位置作为一组行位置数值,去掉该组行位置数值中的重复行位置数值后进行排序,计算排序后的所有相邻两个行位置数值之间的差值,并将各个所述差值确定为所述导出表格的行高;所述原始位置为所述第二类数据控件位置下移之前的位置;所述实际位置为所述第二类数据控件位置下移之后的位置。
4.根据权利要求1所述的报表导出方法,其特征在于,所述表格控件包括表头控件及所述记录控件;所述表格控件的下方存在其他数据控件时,针对行方向上在所述记录控件之上的第一类数据控件、所述记录控件以及行方向上在所述记录控件之下的第二类数据控件采用不同的转换方式,包括:
获得所述导出表格的默认行高;
针对行方向上在所述记录控件之上的第一类数据控件,依据预先设置的位置转换关系,将各个所述第一类数据控件的上边界在报表模板中的位置转换为在导出表格中的位置,以及将各个所述第一类数据控件的下边界在报表模板中的位置转换为在导出表格中的位置;根据所述第一类数据控件上边界在导出表格中的位置及下边界在导出表格中的位置确定所述第一类数据控件对应的行;若所述第一类数据控件对应的行并非完整倍数的行,则调整所述第一类数据控件对应的行的行高,以使所述第一类数据控件对应的行是完整倍数的行;
针对所述记录控件,获得所述记录控件在导出表格中的高度;从预设数据库中读取所述记录控件对应的所有数据记录;针对每一条数据记录,在所述导出表格中确定与所述数据记录对应的行,若所述记录控件的高度与所述默认行高不同,则将所述数据记录对应的行的默认行高调整为所述记录控件的高度;
针对行方向上在所述记录控件之下的第二类数据控件,依据预先设置的位置转换关系,将所述第二类数据控件的上边界在报表模板中的位置转换为在导出表格中的原始位置,以及将各个所述第二类数据控件的下边界在报表模板中的位置转换为在导出表格中的原始位置;计算所述添加行的数量与所述行高的乘积值;将所述第二类数据控件的上边界的原始位置加上所述乘积值,得到上边界在导出表格中的实际位置;将所述第二类数据控件的下边界的原始位置加上所述乘积值,得到下边界在导出表格中的实际位置;根据所述第二类数据控件上边界在导出表格中的实际位置及下边界在导出表格中的实际位置确定所述第二类数据控件对应的行;若所述第二类数据控件对应的行并非完整倍数的行,则调整所述第二类数据控件对应的行的行高,以使所述第二类数据控件对应的行是完整倍数的行;所述原始位置为所述第二类数据控件位置下移之前的位置;所述实际位置为所述第二类数据控件位置下移之后的位置。
5.根据权利要求1所述的报表导出方法,其特征在于,
所述位置转换关系为:W = k1 * Px - k2;其中所述W表示数据控件的左边界或者右边界在导出表格中的位置,所述Px表示数据控件的左边界或者右边界在报表模板中的位置,所述k1及k2表示预设的线性关系系数。
6.一种报表导出装置,其特征在于,包括:
获取单元,用于接收到报表导出请求后,获得所述报表导出请求对应的报表模板;其中所述报表模板中包含有多个数据控件;所述数据控件包括表格控件;所述表格控件的展示样式会影响其他数据控件,具体是所述表格控件下方的其他数据控件在导出表格中的位置;不同体现样式的所述表格控件,需要使用不同的方式来根据所述数据控件在导出表格中的位置导出表格的行高;
转换单元,用于依据预先设置的位置转换关系,将各个所述数据控件的左边界在所述报表模板中的位置转换为在导出表格中的位置,以及将各个所述数据控件的右边界在所述报表模板中的位置转换为在导出表格中的位置;
确定列宽单元,用于根据各个所述数据控件的左边界在导出表格中的位置及右边界在导出表格中的位置,确定所述导出表格的各个列宽;
所述确定列宽单元包括:数值生成单元、数值处理单元和生成列宽单元;
所述数值生成单元,用于将所有所述数据控件的左边界在导出表格中的位置及右边界在导出表格中的位置作为一组列位置数值;
所述数值处理单元,用于去掉该组列位置数值中重复的列位置数值后进行排序,并计算排序后的所有相邻两个列位置数值之间的差值;
所述生成列宽单元,用于将各个差值确定为导出表格的各个列宽;
所述生成列宽单元包括:阈值判断子单元和生成列宽子单元;
所述阈值判断子单元,用于判断各个所述差值是否小于预设列差值阈值,若某一列差值小于所述预设列差值阈值,则删除所述某一列差值;
所述生成列宽子单元,用于将删除所述某一列差值的剩余列差值确定为导出表格的各个列宽;
确定行高单元,用于在两个不同的场景中,根据各个所述数据控件的上边界在所述报表模板中的位置以及下边界在所述报表模板中的位置,确定导出表格的各个行高,包括:第一种场景,所述表格控件的下方不存在其他数据控件时,针对记录控件之外的其他数据控件和记录控件采用不同的转换方式;第二种场景,所述表格控件的下方存在其他数据控件时,针对行方向上在记录控件之上的第一类数据控件、记录控件以及行方向上在记录控件之下的第二类数据控件采用不同的转换方式;
导出单元,用于依据各个所述列宽及各个所述行高切分出导出表格的单元格,并将各个所述数据控件添加到自身对应的单元格中,以导出表格。
7.根据权利要求6所述的报表导出装置,其特征在于,所述表格控件包括表头控件及所述记录控件;所述表格控件的下方不存在其他数据控件时,则所述确定行高单元包括:
第一确定行高单元,用于针对所述记录控件之外的其他数据控件,依据预先设置的位置转换关系,将所述其他数据控件的上边界在报表模板中的位置转换为在导出表格中的位置,以及将各个所述其他数据控件的下边界在报表模板中的位置转换为在导出表格中的位置;将所述其他数据控件上边界在导出表格中的位置及下边界在导出表格中的位置作为一组行位置数值,去掉该组行位置数值中的重复行位置数值后进行排序,计算排序后的所有相邻两个行位置数值之间的差值,并将各个所述差值确定为所述导出表格的行高;
第二确定行高单元,用于针对所述记录控件,获得所述记录控件在导出表格中的高度;从预设数据库中读取所述记录控件对应的所有数据记录,并统计数据记录的条数;根据所述记录控件在导出表格中的高度,在所述导出表格中添加与所述条数相同数量的行;其中各个添加行的行高均为所述记录控件在导出表格中的高度。
8.根据权利要求6所述的报表导出装置,其特征在于,所述表格控件包括表头控件及所述记录控件;所述表格控件的下方存在其他数据控件时,则所述确定行高单元包括:
第三确定行高单元,用于针对行方向上在所述记录控件之上的第一类数据控件,依据预先设置的位置转换关系,将所述第一类数据控件的上边界在报表模板中的位置转换为在导出表格中的位置,以及将各个所述第一类数据控件的下边界在报表模板中的位置转换为在导出表格中的位置;将所述第一类数据控件上边界在导出表格中的位置及下边界在导出表格中的位置作为一组行位置数值,去掉该组行位置数值中的重复行位置数值后进行排序,计算排序后的所有相邻两个行位置数值之间的差值,并将各个所述差值确定为所述导出表格的行高;
第四确定行高单元,用于针对所述记录控件,获得所述记录控件在导出表格中的高度;从预设数据库中读取所述记录控件对应的所有数据记录,并统计数据记录的条数;根据所述记录控件在导出表格中的高度,在所述导出表格中添加与所述条数相同数量的行;其中各个添加行在所述导出表格中的行高均为所述记录控件在所述导出表格中的高度;
第五确定行高单元,用于针对行方向上在所述记录控件之下的第二类数据控件,依据预先设置的位置转换关系,将所述第二类数据控件的上边界在报表模板中的位置转换为在导出表格中的原始位置,以及将各个所述第二类数据控件的下边界在报表模板中的位置转换为在导出表格中的原始位置;计算所述添加行的数量与所述行高的乘积值;将所述第二类数据控件的上边界的原始位置加上所述乘积值,得到上边界在导出表格中的实际位置;将所述第二类数据控件的下边界的原始位置加上所述乘积值,得到下边界在导出表格中的实际位置;将所述第二类数据控件上边界的实际位置及下边界的实际位置作为一组行位置数值,去掉该组行位置数值中的重复行位置数值后进行排序,计算排序后的所有相邻两个行位置数值之间的差值,并将各个所述差值确定为所述导出表格的行高;所述原始位置为所述第二类数据控件位置下移之前的位置;所述实际位置为所述第二类数据控件位置下移之后的位置。
9.根据权利要求6所述的报表导出装置,其特征在于,所述表格控件包括表头控件及所述记录控件;所述表格控件的下方存在其他数据控件时,则所述确定行高单元包括:
默认行高获得单元,用于获得所述导出表格的默认行高;
第六确定行高单元,用于针对行方向上在所述记录控件之上的第一类数据控件,依据预先设置的位置转换关系,将各个所述第一类数据控件的上边界在报表模板中的位置转换为在导出表格中的位置,以及将各个所述第一类数据控件的下边界在报表模板中的位置转换为在导出表格中的位置;根据所述第一类数据控件上边界在导出表格中的位置及下边界在导出表格中的位置确定所述第一类数据控件对应的行;若所述第一类数据控件对应的行并非完整倍数的行,则调整所述第一类数据控件对应的行的行高,以使所述第一类数据控件对应的行是完整倍数的行;
第七确定行高单元,用于针对所述记录控件,获得所述记录控件在导出表格中的高度;从预设数据库中读取所述记录控件对应的所有数据记录;针对每一条数据记录,在所述导出表格中确定与所述数据记录对应的行,若所述记录控件的高度与所述默认行高不同,则将所述数据记录对应的行的默认行高调整为所述记录控件的高度;
第八确定行高单元,用于针对行方向上在所述记录控件之下的第二类数据控件,依据预先设置的位置转换关系,将所述第二类数据控件的上边界在报表模板中的位置转换为在导出表格中的原始位置,以及将各个所述第二类数据控件的下边界在报表模板中的位置转换为在导出表格中的原始位置;计算所述添加行的数量与所述行高的乘积值;将所述第二类数据控件的上边界的原始位置加上所述乘积值,得到上边界在导出表格中的实际位置;将所述第二类数据控件的下边界的原始位置加上所述乘积值,得到下边界在导出表格中的实际位置;根据所述第二类数据控件上边界在导出表格中的实际位置及下边界在导出表格中的实际位置确定所述第二类数据控件对应的行;若所述第二类数据控件对应的行并非完整倍数的行,则调整所述第二类数据控件对应的行的行高,以使所述第二类数据控件对应的行是完整倍数的行;所述原始位置为所述第二类数据控件位置下移之前的位置;所述实际位置为所述第二类数据控件位置下移之后的位置。
10.根据权利要求6所述的报表导出装置,其特征在于,所述转换单元所使用的位置转换关系为:W = k1 * Px - k2;其中所述W表示数据控件的左边界或者右边界在导出表格中的位置,所述Px表示数据控件的左边界或者右边界在报表模板中的位置,所述k1及k2表示预设的线性关系系数。
11.一种报表导出设备,其特征在于,包括处理器和存储器,所述处理器通过运行存储在所述存储器内的软件程序、调用存储在所述存储器内的数据,至少执行如下步骤:
接收到报表导出请求后,获得所述报表导出请求对应的报表模板;其中所述报表模板中包含有多个数据控件;所述数据控件包括表格控件;所述表格控件的展示样式会影响其他数据控件,具体是所述表格控件下方的其他数据控件在导出表格中的位置;不同体现样式的所述表格控件,需要使用不同的方式来根据所述数据控件在导出表格中的位置导出表格的行高;
依据预先设置的位置转换关系,将各个所述数据控件的左边界在所述报表模板中的位置转换为在导出表格中的位置,以及将各个所述数据控件的右边界在所述报表模板中的位置转换为在导出表格中的位置;
将所有所述数据控件的左边界在导出表格中的位置及右边界在导出表格中的位置作为一组列位置数值;去掉该组列位置数值中重复的列位置数值后进行排序,并计算排序后的所有相邻两个列位置数值之间的差值;判断各个所述差值是否小于预设列差值阈值,若某一列差值小于所述预设列差值阈值,则删除所述某一列差值;将删除所述某一列差值的剩余列差值确定为导出表格的各个列宽;
在两个不同的场景中,根据各个所述数据控件的上边界在所述报表模板中的位置以及下边界在所述报表模板中的位置,确定导出表格的各个行高,包括:第一种场景,所述表格控件的下方不存在其他数据控件时,针对记录控件之外的其他数据控件和记录控件采用不同的转换方式;第二种场景,所述表格控件的下方存在其他数据控件时,针对行方向上在记录控件之上的第一类数据控件、记录控件以及行方向上在记录控件之下的第二类数据控件采用不同的转换方式;
依据各个所述列宽及各个所述行高切分出导出表格的单元格,并将各个所述数据控件添加到自身对应的单元格中,以导出表格。
12.一种存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时,实现如权利要求1-5任意一项所述的报表导出方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910097485.3A CN109829147B (zh) | 2019-01-31 | 2019-01-31 | 报表导出方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910097485.3A CN109829147B (zh) | 2019-01-31 | 2019-01-31 | 报表导出方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109829147A CN109829147A (zh) | 2019-05-31 |
CN109829147B true CN109829147B (zh) | 2023-06-30 |
Family
ID=66863292
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910097485.3A Active CN109829147B (zh) | 2019-01-31 | 2019-01-31 | 报表导出方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109829147B (zh) |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101071413A (zh) * | 2007-06-15 | 2007-11-14 | 南京联创科技股份有限公司 | 交叉报表中自动分组的办法 |
CN102103587A (zh) * | 2009-12-17 | 2011-06-22 | 北大方正集团有限公司 | 一种表格转换的方法和装置 |
CN102830947A (zh) * | 2012-08-13 | 2012-12-19 | 南京莱斯信息技术股份有限公司 | 一种基于报表打印模板格式实现的报表打印控件 |
CN103092630A (zh) * | 2013-03-01 | 2013-05-08 | 畅捷通信息技术股份有限公司 | 界面数据输出装置和界面数据输出方法 |
CN104714766A (zh) * | 2015-03-12 | 2015-06-17 | 福建工程学院 | 一种web报表浏览器中直接打印的方法 |
CN105278955A (zh) * | 2015-09-25 | 2016-01-27 | 广州南沙海港集装箱码头有限公司 | 一种码头设备设施管理报表系统 |
CN105404613A (zh) * | 2015-09-24 | 2016-03-16 | 鲁能集团有限公司 | 基于sap平台的xls数据导出方法及系统 |
CN108255489A (zh) * | 2018-01-12 | 2018-07-06 | 北京三快在线科技有限公司 | 前端界面代码生成方法、装置、电子设备及存储介质 |
CN108399054A (zh) * | 2018-02-28 | 2018-08-14 | 北京春草软件科技有限责任公司 | 一种文档切分打印方法 |
CN109213818A (zh) * | 2018-08-15 | 2019-01-15 | 平安科技(深圳)有限公司 | 表格导出方法、装置、计算机设备及存储介质 |
-
2019
- 2019-01-31 CN CN201910097485.3A patent/CN109829147B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101071413A (zh) * | 2007-06-15 | 2007-11-14 | 南京联创科技股份有限公司 | 交叉报表中自动分组的办法 |
CN102103587A (zh) * | 2009-12-17 | 2011-06-22 | 北大方正集团有限公司 | 一种表格转换的方法和装置 |
CN102830947A (zh) * | 2012-08-13 | 2012-12-19 | 南京莱斯信息技术股份有限公司 | 一种基于报表打印模板格式实现的报表打印控件 |
CN103092630A (zh) * | 2013-03-01 | 2013-05-08 | 畅捷通信息技术股份有限公司 | 界面数据输出装置和界面数据输出方法 |
CN104714766A (zh) * | 2015-03-12 | 2015-06-17 | 福建工程学院 | 一种web报表浏览器中直接打印的方法 |
CN105404613A (zh) * | 2015-09-24 | 2016-03-16 | 鲁能集团有限公司 | 基于sap平台的xls数据导出方法及系统 |
CN105278955A (zh) * | 2015-09-25 | 2016-01-27 | 广州南沙海港集装箱码头有限公司 | 一种码头设备设施管理报表系统 |
CN108255489A (zh) * | 2018-01-12 | 2018-07-06 | 北京三快在线科技有限公司 | 前端界面代码生成方法、装置、电子设备及存储介质 |
CN108399054A (zh) * | 2018-02-28 | 2018-08-14 | 北京春草软件科技有限责任公司 | 一种文档切分打印方法 |
CN109213818A (zh) * | 2018-08-15 | 2019-01-15 | 平安科技(深圳)有限公司 | 表格导出方法、装置、计算机设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN109829147A (zh) | 2019-05-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104317968A (zh) | 一种页面自适应调整方法及系统 | |
KR102082541B1 (ko) | 속성 그룹을 이용한 시각적 엘리먼트의 선택 및 편집 기법 | |
CN104572668B (zh) | 基于多个样式文件生成合并样式文件的方法和设备 | |
CN108170655A (zh) | 可视化报表的制作方法、装置、终端设备及存储介质 | |
US20130061124A1 (en) | Managing forms in electronic documents | |
DE102019004670A1 (de) | Automatisches Generieren und Anwenden von Grafiknutzerschnittstellenskalierungsrandbedingungen auf Grundlage von Gestaltungssemantiken | |
CN108255489A (zh) | 前端界面代码生成方法、装置、电子设备及存储介质 | |
CN109635011A (zh) | 基于业务元数据的多级表头报表处理方法、装置及设备 | |
EP4053732A1 (en) | Systems and methods for extracting text from portable document format data | |
CN110543303A (zh) | 一种可视化业务平台 | |
CN107247536A (zh) | 直播界面透明度的调整方法、存储介质、电子设备及系统 | |
CN105844683A (zh) | 基于Canvas和WebWorker的像素差逐帧动画的实现方法 | |
CN106933887A (zh) | 一种数据可视化方法及装置 | |
CN104052626A (zh) | 配置网元数据的方法、装置和系统 | |
CN103150456B (zh) | 一种matlab环境下gui制作方法及系统 | |
CN105512096B (zh) | 一种基于文档中内嵌字体的优化方法及装置 | |
CN103034623A (zh) | 页面切分的方法和装置 | |
CN109829147B (zh) | 报表导出方法及装置 | |
CN106998489B (zh) | 一种焦点越界搜索方法及装置 | |
CN112558969A (zh) | 一种网页表单生成方法、装置、设备及介质 | |
JP5712851B2 (ja) | データ分割装置、データ分割方法およびデータ分割プログラム | |
CN102566849B (zh) | 树形数据绘制输出位置获取和输出方法、装置及erp系统 | |
CN115935917A (zh) | 一种可视化图表的数据处理方法、装置、设备及存储介质 | |
EP4053731A1 (en) | Systems and methods for extracting text from portable document format data | |
US10740539B2 (en) | Page structure adjustments |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |