编辑: ZCYTheFirst | 2019-07-06 |
(2) 当Office 文档加载到 ActiveX 控件以后, 报 表引擎通过 AJAX 技术向服务端请求报表数据;
(3) 页面上的报表脚本将服务器返回的数据通过 Office 自动化编程接口绘制报表;
(4) 用户可以看见报表绘制过程过程, 并可以输 出报表文档.
2017 年第26 卷第2期http://www.c-s-a.org.cn 计算机系统应用Research and Development 研究开发
273 图2基于 ActiveX 的Office 自动化编程改进模型 DSOFramer 的主要接口如下: DSOFramert.open(sURL): 在浏览器中打开服务 器端的 Office 文档;
DSOFramert.ActiveDocument: 获得当前激活的Office 文档对象;
当获得 Document 对象后, 就可以根据 Office 文档 的对象模型对文档进行编程. 下表列举 Word 文档的 主要对象模型. 表1Word 文档对象模型 对象 描述 包含的子对象 Application 应用 Document、Selection Document 文档 Bookmarks、Range Selection 选取内容 Bookmarks、Document、Range Bookmarks 书签 Range Range 位置 Bookmarks 2.3 基于 AJAX 的可视化报表创建模型 结合 2.
1、2.2 节描述的技术, 建立基于 Ajax 的可 视化报表创建模型. 该模型由报表模板、报表引擎、 和Ajax 通讯三部分组成, 如图
3 所示. 报表模板是一个 Office 模板文件, 例如 Word 文档 的模板 (.doc 文件), 模板定义了报表静态内容和可替 换的动态内容书签(Bookmark), 动态内容书签由报表 引擎根据报表动态数据进行替换, 替换内容可以是复 杂的
图表数据. 报表引擎主要是一组和报表模板对应的JavaScript 脚本, 主要负责当前报表的数据组织和 Office 文档对象的编辑、绘制. 以下以 Word 报表为例 说明创建过程. 图3基于 AJAX 的可视化报表创建模型 1) 首先报表引擎(JavaScript)跟随页面下载到浏览 器端, 并启动引擎;
2) ActiveX 控件 DSOFramer 下载 Word 报表模板, 并在 DSOFramer 的Office 容器中打开;
3) 报表引擎通过AJAX客户引擎向远程服务器请 求报表数据;
4) 报表引擎根据报表的业务逻辑组织数据, 使用 Word 的对象模型进行格式化, 写入模板文件;
这时, 用户可以看到 Word 文档的可视化绘制过程;
对于大 数据量的报表, 引擎可以通过报表数据分解, 分多次 通过 AJAX 异步请求, 循环执行 3)、4)步骤写入 Word 模板文件;
5) 通过DSOFramer可以直接打印Word报表文档, 也可以输出到本地文件系统, 甚至可以发回服务器端 进行保存.
3 关键技术实现 3.1 加载报表引擎和 Office 控件 报表页面包含绘制报表的报表引擎(JavaScript)和装载Office 文档的ActiveX 控件,以下是使用DSOFramer 绘制 Word 报表的页面代码段范例. 当页 面打开的时候,IE 会自动下载运行报表引擎 reportEngine.js , 以及装载 ID为 DsoFrame 的Office 编辑控件. 示例代码如下: 计算机系统应用http://www.c-s-a.org.cn
2017 年第26 卷第2期274 研究开发 Research and Development //加载报表绘制引擎脚本 //加载 DSOFramer 控件 3.2 加载 Office 报表模板 Office 报表模板定义了报表的布局, 和数据填充 的书签, 用于简化绘制脚本. 在绘制报表之前, 必须 先从服务器端下载模板, 并在ActiveX控件中打开, 以 便自动化过程执行. 示例代码如下: function loadReport (){ DsoFramer.open (reportUrl);
// reportUrl 是远 程报表模板文件(*.dot) } 3.3 报表绘制 绘制报表应该在报表模板加载完以后开始, 所以 先要在页面中注册模板加载完成的事件处理函数. (1) 在报表页面中注册 Office 文档打开完成事件 的处理方法. 示例代码如下: writeReport();