D0I:10.13374/i.issn1001-053x.2001.04.003 第23卷第4期 北京科技大学学报 VoL23 No.4 2001年8月 Journal of Universlty of Sclesce and Technology Beijing Aug.2001 矿山管理报表的动态网页生成方法 孙广义)侯运炳) 张海波) 1)黑龙江科技学院,鸡西500740312)中国矿业大学北京校区),北京100083 摘要研究了矿山复杂报表动态网页生成方法.以可视化方式自由定制报表结构,将各种 报表的结构信息存人数据库,建立起报表棋板库.浏览器生成报表时,通过Active Server Pages (ASP)方法从数据库中提取报表模板,根据报表的树结构生成报表. 关键词报表;矿山;动态网页 分类号TP311 1问题提出及解决方案 错位.矿山报表的结构可抽象为图1所示的形 式 矿山企业管理报表的种类繁多,结构复杂, 属性A/ 属性B属性X 开发矿山管理信息系统时需要生成和输出大量 项目名称 报表.随着Intranet在矿山企业的应用,需要在 网络上传输各种类型的报表,并通过网页输出 这些报表.而在网络上传输的矿山管理报表总 单元格上提隐藏单元格表线 是处在动态变化之中,这种变化不仅表现在表 图1矿山报表结构 中的数据,而且包括报表的结构.一般网页上的 Fig,1 The st女ructure of the mine repo由 报表结构都比较简单,对一些内容繁琐的报表, 表身结构可以看做是由从行到列排列的表 则处理起来比较困难. 格单元组成的网格.图1中的1和2部分是相 在网页上出报表,通常每页只能显示一个 邻表格单元合并后形成的新的单元格.表格单 表.这样针对一类报表就需要有一个专门的网 元的合并实际上是隐藏了表格单元的相关表 页,很明显,这种方法会大大增加网页的数量, 线.由上下相邻的表格单元合并后形成的新的 而且维护起来也比较困难.在开发某矿山企业 单元格,在输出表身内容时,其位置通常要上提 管理信息系统时,为了解决这一问题,采用了以 原单元格高度的1/2.由于表格单元的合并,新 下技术方案:根据各类报表的结构制作相应的 的表格单元出现了跨行和跨列现象. 报表结构模板,并将报表结构模板信息存储在 图1所示的表身结构可以用图2所示的树 中心数据库中;当用户在浏览器端选择了某项 结构描述四.图2中树的深度表示表的行,树的 报表时,由Active Server Pages(ASP)将该报表模 树想 板的表结构信息从数据库中取出,在浏览器上 形成报表结构,然后将数据内容输入到表中,实 白的 现在同一页面上分别显示不同内容的报表 甲中甲中中 2报表结构模板 报表的结构及形式差异主要体现在表身 中中由中中中 上.矿山报表的表身结构比较复杂,主要是一些 合计、分类项使表头中的表格单元出现合并与 中由由中由中 收稿日期2000-12-18孙广义勇,44岁,散授 图2表身的树形结构 *国家自然科学基金资助课题0No.50074031) Fig.2 Tree structure of the reports
第 卷 第 期 肠 年 月 北 京 科 技 大 学 学 报 口目 加 阔妙 加川留 朋 丁阮卜 。 晰盯 血幼加 、 日 屹 此 矿 山管理报表的动态网页生成方法 孙广义 ” 侯运炳 张海波 , 德龙江科技学院 , 鸡西 中国矿业大学 北京校区 , 北京 侧】 摘 要 研究 了矿山复杂报表动态网页生成方法 以可视化方式 自由定制报表结构 , 将各种 报表的结构信息存人数据库 , 建立起报表模板库 浏览器生成报表时 , 通过 歇四 叫乒 方法从数据库中提取报表模板 , 根据报表的树结构生成报表 关健词 报表 矿山 动态 网页 分类号 问题提出及解决方案 矿 山企业管理报表的种类繁多 , 结构复杂 , 开发矿山管理信息系统时需要生成和输出大量 报表 随着 血别沁 在矿 山企业 的应用 , 需要在 网络上传输各种类型 的报表 , 并通过 网页输出 这些报表 而在 网络上传输 的矿 山管理报表总 是处在动态变化之 中 , 这种变化不仅表现在表 中的数据 , 而且包括报表的结构一般网页上的 报表结构都 比较简单 , 对一些 内容繁琐的报表 , 则处理起来 比较 困难 在 网页 上 出报表 , 通常每页 只能显示一个 表 这样针对一类报表就需要有一个专门的网 页 , 很 明显 , 这种方法会大大增加 网页 的数量 , 而且维护起来也 比较 困难 在开发某矿 山企业 管理信息系统时 , 为了解决这一问题 , 采用 了以 下技术方案 根据各类报表的结构制作相应 的 报表结构模板 , 并将报表结构模板信息存储在 中心数据库 中 当用户在浏览器端选择 了某项 报表时 , 由 将该报表模 板 的表结构信息从数据库 中取 出 , 在浏览器上 形成报表结构 , 然后将数据 内容输人到表 中 , 实 现在同一页面上分别显示不 同内容的报表 报表结构模板 报表 的结构及 形 式 差 异 主要 体现在 表 身 上 矿山报表的表身结构 比较复杂 , 主要是一些 合计 、 分类项使表头 中的表格单元 出现合并与 收稿 日期 侧 卜 冬 孙广义 男 , 岁 , 教授 国家 自然科学墓金资助课题伽 。 错位 矿 山报表的结构可抽象为图 所示 的形 式 项 目户 称 异性 属性 属性 、 汀 圈 矿 山报衰结构 珑 几 由, 加几 加 比 由 表身结构可 以看做是 由从行到列排列 的表 格单元组成 的 网格 图 中的 和 部分是相 邻表格单元合并后形成 的新 的单元格 表格单 元 的合并实际上 是 隐藏 了表格单元 的相关表 线 由上下相邻的表格单元合并后形成的新 的 单元格 , 在输出表身内容时 , 其位里通常要上提 原单元格高度 的 由于表格单元的合并 , 新 的表格单元出现 了跨行和跨列现象 图 所示 的表身结构可 以用 图 所示 的树 结构描述 【 图 中树的深度表示表的行 , 树的 厂一 卜一 一洲 卜一 卜一 忙一 尸一 钾 , 尸一 , 『 一 目 匕一 一巨‘ 匕 二卜匕 匕一州 到一 七曰 任 厂一 一 卜, 一, 圈 衰身的树形结构 电 口 既 ,‘ 加花 山 花 巾 DOI :10.13374/j .issn1001-053x.2001.04.003
●300 北京科技大学学报 2001年第4期 枝表示表的列,节点表示表的单元格.建表过程 表结构特点的分析,将构成报表的基本元素抽 实际上就是树的遍历过程. 象归纳为标题、项目栏、表身、表注等.各种报表 虑到在网页上,表的显示过程是以行为依 元素被设计为活动的实体,在可视化界面上形 据的,因此应设法依此以各行的数据信息描述 成各自的鼠标区,并与相应的弹出式菜单相联 报表的树结构.这样通过网页建立报表时,每次 系,由鼠标菜单引导主要的定制操作 将同行数据一次读出,然后根据节点单元的信 表身结构自定制的技术原理如下:首先生 息依次建立各单元格 成规范的表格单元,然后在此基础上在鼠标菜 如前所述,表树的节点单元有的是由基本 单的引导下隐藏特定的表线合并单元格,从而 的表格单元合并后形成的复合单元.为了与信 形成复杂的表身结构 息处理过程相适应,在报表模板库中以表格基 隐藏表线的可视化操作算法原理如下: 本单元(合并前的单元)为信息单元.信息单元 (1)鼠标进入表身线区,进入元素实体编辑 包括以下特征属性: 状态 row(行),column(列),cross_row(跨行), (2)查找本表线区单元格对应的基础数据中 cross_col(跨列),hide(表线隐藏). 是否含有相应的控制字符(U、D、L、R等). 除此之外,还包括单元格宽度、高度、打印 (3)若未含有相应的控制字符且需要隐藏该 文本、排列方式(居左、居中、居右)等属性 表线,则在该表线位置绘制一条白线覆盖原有 其中cros3row和cross_col记录了复合单元 表线,同时在单元格对应的基础数据中加人相 所合并的行和列.为了能够通过基本单元格表 应的控制字符号.若含有控制符且需要恢复显 示表的树结构,在这里作以下约定: 示该表线,则在当前表现位置绘制一条表线,同 (I)对于基本单元格,令cross row0,cross 时清除单元格对应的基础数据中的控制符、 col=0. 在预览界面上通过表线的可视化拉伸操作 (2)约定合并单元的行和列的信息记录在构 调整表格单元的长度和宽度.定制结果按照报 成该复合单元的第1个基本单元的数据信息里, 表模板信息结构存人模板数据库中.另一种方 即该基本单元格的cross row和cross_col满足 法是利用EXCEL定制报表结构,通过Visual cross row>0or cross_col>0.Cross row cross Basic for Application编程方法,从Excel报表文 c0l分别表示该单元所合并的行数和列数. 档中提取报表的结构(报表模板),并将其保存 (3)对于构成复合单元的非第1个基本单 到数据库中.在Excel工作表中输入表头、表体 元,令cros3row=-1,cross_col=-一1.上述约定表 等必要的表信息,而无须画出表格线.编程时, 明了基本单元的3种类型,同时说明复合单元 利用Excel对象库中提供的一个重要的对象Cur- 的构成情况.在对报表结构信息按行进行处理 rentRegion,来确定当前工作表已使用单元格的 时,根据上述约定,能够准确定义报表的结构. 范围.这样,就能确定当前报表范围对象或在工 Hide表示表线隐藏状态,Hide="U"、"D"、 作表内选定区域.但利用Excel定制报表结构有 "L"、"R"分别表示隐藏单元格的上、下、左、右 以下缺点: 表线.状态标志信息可组合出现,如LR"表示 (1)无法形成真正独立的应用系统,因为即 同时隐藏左表线和右表线. 使将应用系统与Excel集成在一起(用OLE功 能将Excel工作表连入OLE控件中,由代码操 3 报表结构的可视化自定制 作完成报表生成功能),使用应用系统时也必须 可视化自定制就是通过可视化界面自由定 在运行环境中另外安装Excel; 义报表的结构形式,设置报表的属性,最后根据 (2)同样道理,会造成应用系统的版权不能 定制结果形成报表模板文件 独立; (3)应用系统与Excel的界面风格难以统一. 为此,开发了报表可视化自定制环境.报表 可视化自定制和预览界面的生成是通过在Vs- 4ASP报表生成算法 ual Basic的PictureBox控件上灵活控制组成报 表的各个元素的位置而实现的.根据对矿山报 ASP代码是运行在S服务器上的脚本语
北 京 科 技 枝表示 表的列 , 节点表示表的单元格 建表过程 实际上 就是树的遍历过程 虑到在 网页上 , 表 的显示过程是 以行为依 据 的 , 因此应设法依此 以各行 的数据信息描述 报表的树结构 这样通过 网页建立报表时 , 每次 将 同行数据一次读 出 , 然后根据节点单元 的信 息依次建立各单元格 如前所述 , 表树 的节点单元有 的是 由基本 的表格单元合并后形成 的复合单元 为了与信 息处理过程相适应 , 在报表模板库中以表格基 本单元 合并前 的单元 为信息单元 信息单元 包括 以 下特征属性 行 , 团 列 , 跨行 , 跨列 , 表线 隐藏 除此之外 , 还包括单元格宽度 、 高度 、 打印 文本 、 排列方式 居左 、 居 中 、 居右 等属性 其 中 和 尽 记 录 了复合单元 所合并的行和列 为 了能够通过基本单元格表 示表的树结构 , 在这里作 以下 约定 对于基本单元格 , 令 司 , 约定合并单元的行和列 的信息记录在构 成该复合单元的第 个基本单元的数据信息里 , 即该基本单元格 的 口 和 满足 和 分别表示该单元所合并的行数和列数 对于构成复合单元的非第 个基本单 元 , 令 二一 , 尽 。 卜一 上述约定表 明了基本单元的 种类型 , 同时说明复合单元 的构成情况 在对报表结构信息按行进行处理 时 , 根据上述约定 , 能够准确定义报表的结构 表示表线 隐藏状态 , 勺 ” 、 “ 勺 , 、 气 , 、 ” ,分别表示隐藏单元格 的上 、 下 、 左 、 右 表线 状态标志信息可组合 出现 , 如 ’ 气吸 ” 表示 同时隐藏左表线和 右表线 报表结构的可视化 自定制 可视化 自定制就是通过可视化界面 自由定 义报表的结构形式 , 设置报表的属性 , 最后根据 定制结果形成报表模板文件 为此 , 开发 了报表可视化 自定制环境 报表 可视化 自定制和预览界面 的生成是通 过在劝 的 叹 控件上灵活 控制组成报 表 的各个元素的位置而实现 的 根据对矿 山报 大 学 学 报 年 第 期 表结构特点 的分析 , 将构成报表 的基本元素抽 象归纳为标题 、 项 目栏 、 表身 、 表注等 各种报表 元素被设计为活动的实体 , 在可视化界面上形 成各 自的 鼠标 区 , 并与相应 的 弹出式菜单相联 系 , 由 鼠标菜单引导 主要 的定制操作 表身结构 自定制 的技术原理如下 首先生 成规范 的表格单元 , 然后在此基础 上在 鼠标菜 单的引导下 隐藏特定 的表线合并单元格 , 从而 形成复杂 的表身结构 隐藏表线 的可视化操作算法原理如下 鼠标进人表身线 区 , 进人元素实体编辑 状态 查找本表线 区单元格对应 的基础数据 中 是否含有相应 的控制字符 勺 、 勺 、 气 、 吸 等 若未含有相应的控制字符且需要隐藏该 表线 , 则在该表线位置绘制一条 白线覆盖原有 表线 , 同时在单元格对应 的基础数据 中加人相 应 的控制字符号 若含有控制符且需要恢复显 示该表线 , 则在 当前表现位置绘制一条表线 , 同 时清除单元格对应 的基础数据 中的控制符 在预览界面上通过表线 的可视化拉伸操作 调整表格单元 的长度和 宽度 定制结果按照报 表模板信息结构存人模板数据库 中 另一种方 法是利用 定制报表结构阴 , 通过 巧 回 编程方法 , 从 报表文 档 中提取报表 的结构 报表模板 , 并将其保存 到数据库 中 在 工作表 中输人表头 、 表体 等必要 的表信息 , 而无须画 出表格线 编程时 利用 对象库中提供的一个重要 的对象 , 来确定 当前工作表 已使用单元格 的 范围 这样 , 就能确定 当前报表范围对象或在工 作表 内选定 区域 但利用 定制报表结构有 以下缺点 无法形成真正独立 的应用 系统 , 因为 即 使将应用 系统与 集成在一起 用 功 能将 工作表连人 控件 中 , 由代码操 作完成报表生成功能 , 使用应用 系统时也必须 在运行环境 中另外安装 同样道理 , 会造成应用 系统 的版权不能 独立 应用 系统与 的界面风格难 以统一 报表生成算法 代码是运行在 服务器上 的脚本语
Vol.23 No.4 孙广义等:矿山管理报表的动态网页生成方法 301· 言,它可与HTML标记语言混合编写,并可控制 提取,高度则认为与第1个基本单元格的高度 HTML标记的输出M.通过ASP读取报表模板数 相同),根据所计算的尺寸和单元格需要打印的 据库,动态生成报表.下面给出报表生成算法, 内容以及打印内容的排列方式确定打印位置, (1)打开数据库. 并打印表格内容. (2)读出报表标题、项目栏以及报表有关的 (12)判断本行记录是否处理完毕.若未处 设置信息 理完则提取下一个基本表格单元的信息,转(⑧). (3)根据左边距和每列宽度计算出报表每列 (13)判断报表信息是否处理完毕.若未处 的开始坐标位置. 理完转(6). (4)根据标题的坐标位置,打印标题内容. (14)打印表注 (⑤)根据项目栏坐标位置,打印项目栏内容. 上述算法未考虑多页情况.多页报表的生 (6)从数据库中读出1行记录. 成算法与本算法基本原理完全相同,只需作局 (⑦从记录中取出第1单元格记录. 部修改、 (⑧)计算当前单元格位置,判断是否为基本 单元格(cross row=0 and cross col=0). 5结论 (⑨)若为基本单元格,则打印表线并根据单 通过建立报表模板库和动态网页生成方 元格打印内容的排列方式(居左、居中或居右) 法,实现了Browser/Server环境下在浏览器上动 打印表格内容.转②. 态生成各种复杂结构的矿山管理报表的功能, (10)分析当前单元格内容,判断是否含有 可在同一页面上分别显示不同内容的报表,减 “L”,若未含有则根据当前位置和表格单元尺 少了大量网页之间的反复调用.所有数据都集 寸绘制单元格的左表线。判断是否含有U”, 中存贮在数据库中,便于统一维护和管理. 若未含有则绘制单元格的上表线.判断是否含 有“D”,若未含有则绘制单元格的下表线.判 参考文献 断是否含有“”,若未含有则绘制单元格的左 1严蔚敏.数据结构.北京:清华大学出版社,1994 表线. 2张帆,郑志波.报表设计中VB与EXCEL的集成应 (11)判断是否为合并表格单元的第1个基 用.计算机系统应用,19995):65 3金敏,沈德耀.利用VBA在EXCEL下开发工业实时 本单元(cross row>0 or cross col>0).若为第1 控制系统中的智能报表.计算机工程与应用,1999(7): 个基本单元,则根据合并单元格所跨的行数和 哈 列数以及基本单元格的尺寸计算合并单元格的 4王国荣,Active Server Pages&Web数据库.北京:人民 尺寸(其余基本单元格的长度可从本行记录中 邮电出版社,1999 Active Server Pages Method of Mine Reports-Made SUN Guangyi,HOU Yunbing?,ZHANG Haibo? 1)Heiongjiang College of Science and Technology,Juxi 158105,China 2)China University of Mining&Technology Beijing,Beijing 100083,China ABSTRACT The Active Server Pages method of mine reports-made is researched.The structures of reports are defined by making use of visual programming technology,and the structure models of reports are saved to the server database.So,the reports can be made by client browser according to the reports structure informa- tion which are got from the reports model database through the active server pages programming method. KEY WORDS reports;mine;active server pages
日 孙广义等 矿 山管理报表 的动态网 页生成方法 言 , 它可 与 标记语言混合编写 , 并可控制 标记的输出 通过 读取报表模板数 据库 , 动态生成报表 下面给 出报表生成算法 打开数据库 读出报表标题 、 项 目栏 以及报表有关的 设置信息 根据左边距和每列宽度计算出报表每列 的开始坐标位置 根据标题的坐标位置 , 打印标题 内容 根据项 目栏坐标位置 , 打印项 目栏 内容 从数据库 中读出 行记录 从记录 中取 出第 单元格记录 计算 当前单元格位置 , 判断是否为基本 单元格 咖阳 盯 甘 若为基本单元格 , 则打印表线并根据单 元格打印内容的排列方式 居左 、 居 中或居右 打印表格 内容 转恤 分析 当前单元格 内容 , 判断是否含有 帐 , , 若未含有则根据 当前位置和表格单元尺 寸绘制单元格 的左表线 判断是否含有 ‘叭甘 , , 若未含有则绘制单元格 的上表线 判断是否含 有 电 ,, , 若未含有则绘制单元格 的下表线 判 断是否含有 ‘叭叉 , , 若未含有则绘制单元格 的左 表线 判 断是否 为合并表格单元 的第 个基 本单元 冲 若为第 个基本单元 , 则根据合并单元格所跨 的行数和 列数以及基本单元格 的尺寸计算合并单元格的 尺寸 其余基本单元格 的长度可从本行记 录 中 提取 , 高度则认为与第 个基本单元格 的高度 相 同 , 根据所计算的尺寸和单元格需要打印的 内容以 及打印内容 的排列方式确定打印位置 , 并打印表格 内容 判断本行记录是否处理完毕 若未处 理完则提取下一个基本表格单元的信息 , 转 判断报表信息是否 处理完毕 若未处 理完转 打印表注 上述算法未考虑多页情况 多页报表的生 成算法与本算法基本原理完全相 同 , 只需作局 部修改 结论 通 过建立 报表模 板库 和 动 态 网 页 生 成 方 法 , 实现 了 、 环境下在浏览器上动 态生成各种复杂结构 的矿 山管理报表 的功能 , 可在 同一 页面 上分别显示不 同内容 的报表 , 减 少 了大量 网页之间的反复调用 所有数据都集 中存贮在数据库 中 , 便于统一维护和管理 参 考 文 献 严蔚敏 数据结构 北京 清华大学 出版社 , 张帆 , 郑志波 报表设计中 与 的集成应 用 计算机系统应用 , 火 “ 金敏 , 沈德粗 利用 在 下开发工业实时 控制系统中的智能报表 计算机工程与应用 , 王 国荣 阳 数据库 北京 人 民 邮电 出版社 , 州泊 一 份阴侧沙 , ” 止心 , 刀丈咬刃 月勺记心刀 州吩肠哺如唱 乎 傲姆 公比加 】雌以 川 幻仍 , 七 皿 触 公代口姆 面 乙 肠沁加扣晌盯 价幼五明旧闷魄 翻犯 , 七皿 七 比 , 叫笋 七 拼州卜 川 勿 幽吨 目 旧 洲口 口唱 奴加目。 既 阳 加明奴理 州 由 山山山创低 ‘ , 伽 拍卯巾 加 傲卜 枷泊 川吨 哪叨触 珍 眼 丘 峨 石 。 , 盆 闰