技术开发 频道

Oldtab:赶超Excel的通用制表软件

        【IT168 技术】Excel,用记录单元格属性(数据也作为单元格属性)。辅于必要时,用宏记录部分制表操作的方式,表达表格。带来,表间数据冗余、不同步及必须要宏的弱点。新方案,用独立记录数据,再记录全部制表操作及参数的方式,表达表格。也即,新方案记录操作过程。Excel记录操作结果。

  这里,要说说我对制表软件设计的研究。

  一、Excel的方案与弱点:

  (一) Excel的方案:

  要设计新软件,有必要对Excel的方案,作个分析。Excel的功能众多。我们要分析的,是其核心:以表格状显示及打印数据。为达到此核心目的,Excel做了:

  1. 设计了表格的表达方式:

  即在内存(或临时文件)中,得到一个数值化的表格。该方式,要能表达任何表格。即要有通用性。具体点说,Excel把表格看作是:一个由若干单元格组成的大方格。每个单元格有各种属性,包括:数据、字体、边框、显示范围等。改变这些属性,就可改变表格的内容与外观。显然,这就可以表达任何表格了。

  2. 设计了操作介面:

  内存中数值化的表格,用户是看不到的。操作介面用来,把数值化的表格,直观的显示给用户。并提供响应用户操作的功能。让用户容易地修改数据及外观。这个介面设计得很好,使得Excel有很好的易用性。

  3. 设计了文件格式:

  在内存或临时文件中的数值化表格,一旦机器断电。立即会消失。因此,必须设计出一个文件格式保存表格。Excel用:直接保存内存中的数值化表格的值。即保存那些单元格的属性值。来再现表格。

  (二) Excel制表的弱点:

  Excel的方案,看似很好。但,也带来以下弱点:

  1. 数据冗余:

  数据成为单元格的属性。在一批数据制多种表格时。每张表都有一份数据付本。也就是说,同一批数据制多表时,有数据冗余。冗余的数据,自然有表间数据的同步问题。即,制表系统,要设计数据同步功能。用户要考虑,必要时做数据同步。

  2. 需要宏:

  电子表格的这种记录表格的方式,本质是记录操作的结果。而对于:排序、过滤等。必须记录下操作及参数,才能再现。为此,Excel要设计“宏”。给用户带来:开始记录宏、结束记录宏和应用宏等问题。

  二、新方案:

  假设我们写出了Excel软件。现在要做的就是,修改它。得到一个保留Excel全部功能而没有其弱点的新软件。

  (一) 去除宏:

  从前面的分析知,我们关注的Excel的核心功能,由:内存里的数值表格、介面上的编辑功能、文件中的内容格式三部分组成。

  它们这样工作着:1)用户在介面上“做”操作。介面接受到的操作及参数,转成内存里的表格参数值。介面同时显示新表格参数值对应的新外观。2)程序结束时,把内存中的表格参数值转存到文件中。3)再次启动程序打开旧表时,把文件中内容转为内存里的数值表格参数。即再现了表格。

  换一个思路:既然表格是做出来的,那么,我们记录下“做”的过程。即记录下全部操作。不是一样可以再现表格吗?回答是肯定。

  新思路的程序将这样工作:1)保持Excel工作的第一部分。2)每一个操作的编号和操作参数长及参数,立即直接保存到文件。3) 再次启动程序打开旧表时,逐条读出文件中记录的操作,转为内存里的数值表格参数。即再现了表格。

  可看,只要改变文件记录的内容(由Excel的记录状态,变成记录操作及操作的参数),即成为一个新的制表软件。很明显,只要修改文件读写的部分。对功能不会有任何不利影响。为后面的叙述,称这个新的制表软件为newExcel。

  唯一明显的变化是:关程序后。再次打开表格。在菜单的撤消项下。会出现上次就有的全部操作项。可再撤消。

  记录全部操作,有啥好处呢?好处也是明显的。因为,宏是为记录某一个或几个连续操作而加的。现在,记录下了全部操作。那某一个或几个操作,自然也被记录了下来。也就是说,不再需要宏了。

  (二) 防冗余:

  这样做:先以某种数据库形式,单独把数据记录下来。制表时,复制数据得临时付本。操作都对付本进行。关程序时,程序自动删除付本。这肯定就能解决冗余问题。

  按这种方式来工作,文件结构改为:以数据库形式保存的数据,加在文件的前部。文件后部依旧保存制表操作及操作参数即操作集。一批数据,做多个表格。就要在文件后,保存多个操作集。为了区分这些操作集。在每个操作集前面,定义32字节,用于保存操作集的名称。为叙述方便,称含有名称的操作集为模板。

  这样来构成新软件:在newExcel的基础上,增加一个数据库编辑工具。简称数据编辑具,专用于文件前部那些数据的编辑。

  新软件这样工作:先用数据编辑具输入好数据。再运用newExcel的强大外观控制功能,来确定表格的外观。

  三、报表软件:

  细心的你,或会说:你这新方案,不是跟“报表软件”很相似吗。因此,有必要说说报表软件。

  报表软件,已经是一个专用名词了。特指在用数据库软件处理并保存数据的基础上,为更方便制出表格而设计的软件。用于编写数据管理软件的程序员用来做二次开发。

  显然,这种软件,数据保存在数据库文件中。表格的外观参数,保存在另一个文件中。不利于设计出通用的制表软件。

  那么,如果设计一个文件。前部保存数据,后部保存外观参数。不就可设计出通用制表软件了吗?是的。如果后部保存全部操作,那就跟本方案一样了。如果,强调与Excel的文件格式兼容:后部保存的是操作的结果。自然免不了Excel的弱点。也就是需要宏。

${PageNumber}

  四、实施时的考虑:

  通过虚拟修改Excel,说明了新软件的原理。要实现新软件,当然无法修改Excel得到。只能是写代码了。

  与Excel比较,新软件的设计,还是有些特殊性。如下:

  (一) 做了两点简化:

  1. 只显一个表:

  一批数据,制多表时。有:显示全部表格与只显示关注的那一个表格,两种方式。Excel用了前者(多工作薄方式)。本软件,用后者。希望能降低实现的难度。

  这就带来一个显示哪一个表格的问题。程序要设计一个“模板管理”窗口,用来辅助管理模板。用户创建新模板时,在该窗口给定模板名。或在该窗口选择要显示、编辑的旧模板。同时,在该窗口中,还可方便地:修改模板名、删除模板、改变模板之间的顺序等。

  2. 把表格分成两类:

  一类是:每一列由一个表达式表达。简称“列式表”。另一类是:每个单元格由一个表达式表达。简称“格式表”。虽然,列式表,可看着是格式表的特例处理。但在新软件中,把列式表独立处理。一为降低难度。二是列式表也确实有些自身的特殊之处,独立出来处理好,能为用户带来方便。

  在模板管理窗口输入新模板名时,就可选择将要制作的表格为格式表或列式表。

  选择格式表时,弹出的外观编辑窗口,默认显示一个空表格。每个单元格都可编辑内容,或编辑为一个表达式。限制表格行数为65536。

  选择列式表时,弹出的外观编辑窗口,默认显示“数据编辑具”编辑好的库中的全部数据。单元格不可编辑。行数由库数据决定。不象格式表那样,做65536行限制。

  (二) 五点强化:

  1. 数据分类:

  为实现新软件,数据库,用FoxBsae格式。我们知道,FoxBase的字段,是分类型的。新软件保留这个方式。这样,对数值的操作更有好处。如:统计,可设计为默认对全部数值型字段进行。

  2. 分组:

  Excel在分类汇总时,是可以指定分类(即分组)字段的。也就是说,它的分组,是属于分类汇总功能的一个属性。不是属于数据本身的。对数据,它只能指定分页符。

  新软件,把分组作为数据的一个独立属性。即,不做统计等操作。也可指定数据分组的字段。进而,可以控制后一组数据,以:连续、换行、换栏、换页等方式显示。

  3. 统计:

  Excel可以指定单元格表达式或通过分类汇总进行统计。前者,是属于单元格。后者,属于分类汇总操作。

  由于,将表格分成了格式表与列式表。对列式表,新软件的统计,要在数据层进行。所谓数据层进行。是指,指定统计式后。即对全部数据的数值型字段进行相应统计。数据有分组时,同时计算出各组的相应统计。

  统计结果,显示于各组数据之前。且不受数据行显示规则限制。即统计行可有自己的独立显示规则。

  4. 第零行:

  让第零行按独立规则处理与显示。

  5. 强化排版:

  Excel虽然对单元格的外观控制很强。但,对于纸张的使用,考虑不够。象表格窄可打印多栏。或表格宽要用多张纸分散打印。都没有考虑。新软件加强了这些处理。

  五、实现:

  历时十七年,完成:数据编辑窗、外观编辑窗、模板管理窗及排序、表达式解释等功能块,并由此组成了一个全新的制表软件。只是,外观编辑窗目前只能编辑“列式表”。

  新软件实现得比较理想。体现在:

  (一) 程序小巧:

  程序仅一个文件。大小不到1M。复制即可工作。不写注册表。点菜单项“卸载”,即自动卸载。不对你机器产生任何不利影响。

  (二) 示例:

  菜单上点“示例”。则产生示例数据并制出相应表格。方便研习。回到工作状态,则自动删除示例数据及表格。

  (三) 锁列:

  数据编辑窗,可容易的产生、编辑表格文件。以字节为单位横向滚屏数据并可锁定左侧若干列不参与滚动。

  (四) 拖拉外观:

  外观编辑窗中,会即时显示表格。并显示一些特殊的点线,可用鼠标拖动这些特殊点线。就可容易地改变表格外观。包括容易地拖出多层表头。

  (五) 外观编辑窗,特别强化“自动化”。即:

  1. 给出纸大小,表格字号后。程序自动确定纸方向及横向栏数。

  2. 给出分组表达式。程序自动将数据分组。

  3. 给出统计式。程序自动统计。在有分组的情况下,还会自动给出各组的小计。

  4. 给出分级统计或分类统计式。程序自动进行分级与分类统计。有分组时,自动给出各组的分级与分类统计。

  (六) 通过外观编辑,做出的表格,其表格名称,会出现在主菜单中。输入新数据。点主菜单中的表格名称,即可输出。

  (七) 为了通用性。样式中,页眉、页脚、列内容、分组、统计等,都用表达式表达。由表达式解释具解释得到数据。表达式可含:

  1. 加、减、乘、除、关系、逻辑等运算。带参数的函数。带参数的数组。

  2. 运算量可是函数、数组。函数、数组的参数,也可是运算式。

  3. 可用成对的圆括符改变运算顺序。

  4. 输入表达式时,一个提示板,会显示可用的函数、数组、变量、运算符等。

  六、软件下载:

  程序取名:oldtab.exe。中文名:老练制表。简称:老表。在以下网址可得到:

  百度云盘:http://pan.baidu.com/share/link?shareid=120244&uk=488391153

  爱问知识人:http://iask.sina.com.cn/u/1999457951/ish

0
相关文章