报表实例存储方法及装置、报表读取方法制造方法及图纸

技术编号:3762042 阅读:265 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种报表实例存储方法及装置,所述方法包括:将报表对象分为三层结构,分别为:模板层、定义层和实例层;将报表实例单元格的所有默认属性存储到所述模板层的报表默认对象中的默认单元格中;将所述报表实例单元格对应的报表定义单元格存储到所述定义层中的报表定义对象中,所述定义单元格中存储所述报表实例单元格的非默认的静态属性;将所述报表实例单元格存储到所述实例层中的报表实例对象中,所述报表实例单元格中存储自身的动态属性。本发明专利技术还公开了一种报表实例读取方法。利用本发明专利技术,可以节省内存资源,提高内存使用效率。

【技术实现步骤摘要】

本专利技术涉及数据存储技术,具体涉及一种报表实例存储方法及装置、报表 读耳又方法。
技术介绍
在报表产品领域中,都不可避免地需要报表实例的存储。所谓净艮表实例是 指报表定义经过数据填充后产生的对象。 一般情况下,报表实例对象会比报表 定义对象大很多。如下表l所示为一种报表定义<table>table see original document page 4</column></row><table>表l对上述报表定义填充后得到报表实例如下表2所示:<table>table see original document page 4</column></row><table>表2报表实例一般是报表单元格的集合(或其它最小元素),单元格中可以获 取该单元格的专有属性,如字体、字号、背景色等等,有些单元格的属性可能 多达几十种,如何在内存中有效地组织与存储这些属性,会极大影响到运算效 率和存储空间的占用,是报表产品效率提升的关键:技术。在现有技术中,通常报表实例的每个单元格中都存储了该单元格相关的所 有属性信息,这些属性都是单元格独有的属性。这种存储方式结构简单清晰,也满足了报表实例存储的需求,但是由于属性为单元格独有,单元格间的共同属性不能共享,这样浪费了很大的存储空间, 当报表数据量很大时,很有可能造成内存耗尽,会严重影响报表产品的性能。
技术实现思路
本专利技术实施例提供一种,以节省 内存资源,提高内存使用效率。为此,本专利技术实施例提供如下技术方案 一种报表实例存储方法,包括将报表对象分为三层结构,分别为模板层、定义层和实例层; 将报表实例单元格的所有默认属性存储到所述模板层的报表默认对象中 的默认单元格中;将所述报表实例单元格对应的报表定义单元格存储到所述定义层中的报 表定义对象中,所述定义单元格中存储所述报表实例单元格的非默认的静态属 性;将所述报表实例单元格存储到所述实例层中的报表实例对象中,所述报表 实例单元格中存储自身的动态属性。优选地,所述报表默认对象、所述默认单元格均为单例模式,所有报表实 例单元格共享所述默认单元格的默认属性。优选地,所述方法还包括对每个定义单元格设置一个指向所述默认单元格的指针; 对每个实例单元格设置一个指向所述定义单元格的指针。优选地,多个实例单元格共享同一个定义单元格的非默认的静态属性。 一种报表实例存储装置,包括模板层、定义层和实例层; 所述模板层包括才咏默认对象,用于存储报表默认单元格,所述报表默认单元格中存储报表实例单元格的所有默认属性;所述定义层包括报表定义对象,用于存储报表定义单元格,所述定义单元格中存储报表实例单元格的非默认的静态属性;所述实例层包括报表实例对象,用于存储报表实例单元格,所述实例单元格中存储报表实例单元格的动态属性。优选地,所述报表默认对象、默认单元格为单例模式,所有报表实例单元 格共享所述报表默认对象中的默认单元格中的默认属性。优选地,每个定义单元格包括一个指向所述默认单元格的指针;每个实例 单元格包括一个指向所述定义单元格的指针。优选地,多个实例单元格共享同一个定义单元格的非默认的静态属性。一种报表实例读取方法,包括读取报表实例对象中所述实例单元格的属性;如果读取的结果为空,则获取所述报表定义对象中对应的定义单元格,并 读取所述定义单元格的非默认的静态属性;如果读取的结果为空,则获取所述报表默认对象中的默认单元格,并读取 所述默认单元格的默认属性;输出所述实例单元格的属性。优选地,所述获取所述报表定义对象中对应的定义单元格具体为根据所 述实例单元格中的指针获取所述指针指向的报表定义对象中对应的定义单元 格;所述获取所述报表默认对象中的默认单元格具体为根据所述定义单元格 中的指针获取所述指针指向的报表默认对象中的默认单元格。本专利技术实施例报表实例存储方法及装置,将报表对象进行分层存储,将含 有共性的单元格属性都存储在最底层,即模板层,这样,可以使所有报表实例 单元格共享该层存储的信息,因而无需将该属性分别存储到每个实例单元格 中,从而大大节省了存储空间。进一步地,对每个定义单元格设置一个指向所 述默认单元格的指针,并且对每个实例单元格设置一个指向所述定义单元格的 指针,从而可以在读取实例单元格属性时可以方便地获得该实例单元格的相关 属性。具体地,在报表实例读取时,釆用从上到下逐层读取策略,即实例层、 定义层、模板层,如果在上层没有获得实例单元格的相关属性,则进到下一层 读取,从而最终获得该实例单元格的相关属性。可见,本专利技术实施例提供的方法及装置,不仅可以高效地存储报表实例, 大大减小了内存消耗,提高了内存使用效率,节省了有限的内存资源;而且, 采用逐层读取的策略,保证了运行效率。附图说明图l是本专利技术实施例报表实例存储方法的流程图; 图2是本专利技术实施例才艮表实例存储装置的结构示意图; 图3是本专利技术实施例报表实例读取方法的流程图。具体实施例方式为了使本
的人员更好地理解本专利技术实施例的方案,下面结合附图和实施方式对本专利技术实施例作进一步的详细说明。如图1所示,是本专利技术实施例报表实例存储方法的流程图,包括以下步骤 步骤IOI,将报表对象分为三层结构,分别为模板层、定义层和实例层; 优选地,所述报表默认对象、默认单元格为单例模式,所有报表实例单元格共享所述报表默认单元格的默认属性;当然,本专利技术实施例对此不做限定,也可以将不同的属性分别进行存储,例如每个属性存储在其对应的一个默认单 元格中;步骤102,将报表实例单元格的所有默认属性存储到所述模板层的报表默 认对象中的默认单元格中;步骤103,将所述报表实例单元格对应的报表定义单元格存储到所述定义 层中的报表定义对象中,所述定义单元格中存储所述报表实例单元格的非默认 的静态属性;步骤104,将所述^^实例单元格存储到所述实例层中的报表实例对象中, 所述报表实例单元格中存储自身的动态属性。本专利技术实施例报表实例存储方法,将报表对象进行分层存储,将含有共性 的单元格属性都存储在最底层,即模板层,这样,可以使所有报表实例单元格 共享该层存储的信息,因而无需将该属性分别存储到每个实例单元格中,从而 大大节省了存储空间。在上述实施例中,为了便于存储数据的读取,还可以对每个定义单元格设 置一个指向所述默认单元格的指针,并且对每个实例单元格设置一个指向所述定义单元格的指针。当然,本专利技术实施例并不仅限于这种方式,比如还可以建 立不同层次的单元格之间的引用或对应关系,以指示上层单元才各对下层单元格存储的属性的共享关系。需要说明的是,多个实例单元格可以共享同一个定义单元格的非默认的静 态属性。本专利技术实施例还提供一种报表实例存储装置,如图2所示,是该装置的结 构示意图。在该实施例中,所述装置包括才莫^1层20、定义层21和实例层22,其中 模板层20包括报表默认对象,用于存储报表默认单元格,所述报表默认单元格中存储报表实例单元格的所有默认属性;定义层21包括报表定义对象,用于存储报表定义单元格,所述定义单元格中存储报表实例单元格的非默认的静态属性,如图2中所示的定义单元格1至定义单元纟各m;实例层22包括报表实例对象,用于存本文档来自技高网
...

【技术保护点】
一种报表实例存储方法,其特征在于,包括: 将报表对象分为三层结构,分别为:模板层、定义层和实例层; 将报表实例单元格的所有默认属性存储到所述模板层的报表默认对象中的默认单元格中; 将所述报表实例单元格对应的报表定义单元格存 储到所述定义层中的报表定义对象中,所述定义单元格中存储所述报表实例单元格的非默认的静态属性; 将所述报表实例单元格存储到所述实例层中的报表实例对象中,所述报表实例单元格中存储自身的动态属性。

【技术特征摘要】

【专利技术属性】
技术研发人员:柴永春邢铁军张霞马帅
申请(专利权)人:东软集团股份有限公司
类型:发明
国别省市:89[中国|沈阳]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1