(该文写于2008年,本已通过某核心软件期刊的审稿,但当时感觉刊登费用过高而放弃发表。现在真是做学问也做不起了。)

 

 

0        前言

在基于 Web 的企业信息管理系统中,经常遇到这样的情况:用户需要输入大量的数据,而此时采用 HTML 页中的 Form 元素,易用性很差。一种解决办法是采用其它公司专门开发的表格控件,嵌入到 Web 页中,这种方案,一要安装此新控件,二要降低 IE 的安全级别,容易引起用户对安全方面的顾虑,进而招致反感情绪。

其实 MS Office 家族中的 Excel 已提供了强大的表格功能,且多数情况下已被安装,不存在发布问题,因此在需要大量输入的情况下,引入 Excel ,不失为一个好的解决方案。 本文提出将HTML 页与Excel 文档有机结合起来,组成一种双客户端容器的应用,它 是对传统 Web 应用的一种有益扩展,以 满足 企业信息管理系统中特殊的要求。


1        Excel 应用容器的特性

Excel 以表格为基础,正如在 HTML 世界中的 Table 的作用一样, Excel 具有“天生”的定位输入功能,而企业办公环境中,需要处理的正是大量具有二维表格性质的数据,因此 Excel 是企业管理人员最喜欢使用的电子文档处理软件之一。

在企业信息管理的领域内,仔细考察 Excel ,发现它具有以下优良的特性:

  •   几乎所有人员都会使用;
  •   几乎所有机器都已安装;
  •   使用 VBA 可以扩展出复杂的应用;
  • 易用性非常好,符合用户操作习惯;
  • 基于表格的属性,可以很方便地设计出格式化的输入。

    从这些特性可以看出, Excel 具有应用容器的特征,在输入特性上,比 IE 中的 Form 要优越得多,因此,在基于 Web 应用的企业信息管理系统的背景下,正常情况下采用 HTML 页,在需要大量数据录入时,采用 Excel 文档,将是一种优美的组合。 Excel HTML 页结合有两种方法,一种是Excel 文档直接以对象方式嵌入页面,另一种以链接下载的方式嵌入页面,因Excel 目前不提供文档的远程操作,所以第二种方式更适合一些。

 

2       双客户端容器(IE+Excel) 应用设计

在双客户端应用中,Excel 是与IE 对等的容器,针对Excel ,必须扩展其已有的功能,完成Excel 作为客户端容器所必备的功能,其中,最主要需要解决通讯、文档“身份”、文档保护等问题,如何编写HTML 页、服务器如何保存数据等传统Web 应用中的问题不是文本的讨论重点。

2.1 Excel 与服务器端的通讯

目前在Web 应用中,Ajax 已被大量应用,实际上,参照Ajax ,在Excel 中同样可以调用系统提供的通讯对象与服务器进行通讯,代码大致如下所示。

set request = CreateObject("Microsoft.XMLHTTP")

由于VBSJS 的相似性,所有相关的VBS 编程都可以模仿Ajax 中对应的部分。本文的实现方法就是用VBS 编写了一个简化的通讯模块,负责Excel 文档与服务器的通讯。服务器端信息的接收和发送过程就是通常的Ajax 响应,本文不再描述。

Excel 与服务器的通讯协议遵从XML 规范,本文定义了三种类型的信息:一是错误信息,二是纯消息信息,三是数据+消息的信息,协议大体结构如图1 所示。

<XmlResponse>

<ReturnCode></ReturnCode>

<WorkBook>

</WorkBook>

<Error></Error>

<Message></Message>

</XmlResponse>

1 Excel 与服务器端XML 格式的通讯协议

1 中,<ReturnCode> 元素表示信息类型,针对对不同的信息,Excel 与服务器采用不同的处理方法,例如表示纯消息时,<Message> 元素将是有实际意义的元素。<WorkBook> 内包含<Sheet><Cell><Validation><Default> 元素,分别与Excel 中的页、单元格、输入内容限制(形成下拉框)和缺省显示单元格相对应。

2.2 Excel 文档的唯一标识

Web 页对应,Excel 文档属于“服务器”端资源,使用时从服务器端下载,因此该文档应有一个唯一标识,与HTML 页中的Cookie 作用类似,用作该文档的身份标识,实际上,这个标识可以与Cookie 中表明身份的标识具有相同值,并在服务器端采用同一套处理机制。作者经过多次尝试,发现将Excel 文档属性用作“Cookie ”,是最佳方案。

首先创建一个自定义属性,并赋其初始值为某个特别值,例如32 个“A, 当该文档被下载时,服务器端程序读取该文档,查找出特别值位置后,替换为表明用户身份的GUID 后,发送到客户端。在客户端,由于底层通讯模块为定制开发,Excel 每次向服务器提交请求时,从文档属性中读出该标识并随请求一起发送,服务器端程序就可以根据该标识进行身份认证,并执行相关安全策略/ 权限的判断,进而允许或拒绝该操作。

2.3 Excel 文档的保护

缺省状态下,Excel 文档中VBA 项目以及Sheet 中有关设置和单元格状态是不受保护的,用户可以随意修改,Excel 文档的安全性低。因为Excel 文档格式可能遭受频繁修改(需求变化),采用静态保护使开发人员在维护文档时也不方便,因此,本设计将文档的保护用代码实现,在文档下载并在Excel 中进行初始化操作时,动态设置操作区域与锁定区域和其它受保护设置项。

2.4 Excel 文档的操作

Excel 固有的表格性质,使得用户输入界面的设计十分方便,一般情况下,输入界面就是用户平时使用的,其公式或格式不能修改。从数据的提交方式,有两种形式:一是整个Sheet 中的所有数据存储到数据表中的一条记录(行),另一种情况是Sheet 中一个区域内的数据存储到表中的一条记录,另一个区域中的一行存储到另一个表的一条记录(这两个表往往有主从关系)。

2.5 Excel 与服务器端的交互过程

     在服务器端,涉及Excel 请求的专门功能是生成或解析满足协议要求的XML ,从数据层获取或向数据层提交相关数据、身份认证等功能,与传统Web 应用相同,无需专门开发。图2 给出了当用户需要Excel 文档进行输入时,客户端(IE+Excel )与服务器端的处理过程,正常情况下,这一过程需要4 次通讯(IE 请求Excel 文档、服务器发送Excel 文档、Excel 文档请求初始化数据和服务器发回相关数据)和2 次身份认证(HTML 页请求时的身份认证未画出)。

   一般情况下,Excel 文档只负责数据输入,在编辑过程和编辑完成需要保存数据时,Excel 文档与服务器端的通讯过程与图2 类似,但此时,Excel 负责生成协议要求的XML 文档,发送到服务器,由服务器端解析并进行相应的数据操作。

 

 

2 请求Excel 文档( 下载) 时处理过程

 

3        双客户端容器应用举例

在作者开发的炼铁生产管理系统中,需要记录每一罐铁水的毛重和返重,存在大量的数字输入,为此,设计了铁水重量输入的HTML 页和Excel 文档的双输入方法,当需要少量修改时,可直接在HTML 页中进行,需要大量输入时,则打开Excel 文档进行,如图3 所示。图中背景是HTML 输入,前景是Excel 输入,二者可同时对铁水重量进行修改。

 

 

 

3  IE+Excel 双客户端容器输入界面

4      结论

     针对需要大量输入数据的场合,提出一种扩展传统 Web 应用的方法:以 Excel 文档代替 HTML 页作为用户界面,构成双客户端容器( IE+Excel )应用的企业信息管理系统。通过解决通讯、身份认证等问题,本文实现了 Excel 作为客户端容器的必要功能,使 Excel 文档适合于用户输入。将这种双客户端容器应用到实际系统中,极大地提高了用户易用性,获得用户认可,证明本设计是合理的。

 

 

参考文献

[1] 毛琦, 高杨. 基于企业信息门户的Excel VBA 开发应用——搭建铁路运输快速反应机制管理平台,办公自动化(综合版),    2008,620-22

[2] 崔海文, 龚尚福. 基于Web 的现代煤业集团劳资管理系统的设计与实现,工矿自动化,2008,3: 98-100

[3] 徐琳.Excel 中实现数据保护的方法在Excel 中实现数据保护的方法,内江科技,2008,5:143-144

[4] 彭小平, 颜清.Excel 中基于VBA 的嵌入式" 化工实验数据处理" 自定义程序,  计算机与应用化学,2008,1: 107-110

[5] 褚法政,周峰,孙更新.Ajax 开发技术与实践原理. 电子工业出版社,2007

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐