关于表格数据的撤销与恢复

     由于项目需要, 一直想做个表格编辑器。visual studio里面dataview好像做的挺好的,可是功能还是不够。用户习惯了在office里面编程,所以如果你不朝那方面靠近,人家心里老是很不舒服。微软害死人啊。在表格编辑器里有个撤销与恢复功能我一直想实现。在今年暑假的时候我勉强实现了一个,不过让我不是很满意。大概介绍下:

     将用户的动作分成两种,小型动作与大型动作。小型动作一般是对于一个单元格的变化。大型动作是类似于,粘贴(我实现了跟excel兼容的粘贴功能,可以将excel上的数据直接粘贴上去)、删行、清空一片区域等等这些同时改变一片数据的动作。对于用户的每个动作都进行保存,最多保存10(可以设置)步。小型动作记录改变的单元格行号,列号,原始数据,新数据。

大型动作直接将整个原表和新表保存到数组中。通过这些保存动作在原理上采用堆栈就可以实现撤销与恢复,只是代码问题就是了。可是存在一些问题:当用户点击保存的时候,我并不知道用户改变了哪些数据,也就是说我只能删除原表,保存新表。这对于一些数据来说是很不合适的。还有就是空间浪费,当用户用一个窗口还不怎么觉得,可是多打开几个窗口后,明显变慢。

     对于这个问题,我重新组织思路,设计了下面的控件。目前尚未实现,因为我已退出该项目开发,没什么动力来完成。

     将用户的动作分成三种:插入新行,删除行,单元格改变。对于用户的每一步操作记录:操作步数,操作类型,操作行,操作列,原始数据,新数据。

    插入新行:需要写:操作步数,操作类型,操作行

    删除行:需要写:操作步数,操作类型,操作行

    单元格改变:需要写:操作步数,操作类型,操作行,操作列,原始数据,新数据。

    同时用一个数组来记录每一行数据的属性(以行为单位),比如说此行数据如果保存是需要update还是insert。还要一个数组:用来记录删除的记录。

    基本上保存了这些东西撤销与恢复数据就不是问题了。

 

你可能感兴趣的:(编程,Excel,Office)