我们经常在写程序的时候,发现需要考虑数据导入,特别是Excel 导入、导出。有些人也许会说,这有什么难的!
是的,确实不难!
使用Office 的自动化对象,可以很方便操作程序写入。不过这种方式往往比较慢。也可以使用特定的控件进行读写,比如 XLSReadWrite 就是一个非常好有名的控件,最新的更新,已经可以支持 EXCEL2007 了。
不过我感觉还是很麻烦。而且这里面还有增加很多不需要的组件的引用。特别是,如果客户的机器上没有安装Office 怎么办呢?(虽然这几乎不可能,但是很多服务器上确实不安装。)
我一开始想到这个问题就头痛。而且我还考虑到是否也要支持多种格式导入,比如TXT 文件、 ACCESS 文件等等,但我最后决定谁也不支持,就支持一个:剪贴板。
从EXCEL 或者很多表格控件中,都支持复制到剪贴板。我们只需要考虑获取这个文本,就可以直接得到需要导入的数据。而这个数据格式又是非常公开标准的。中间省去了很多数据引擎。也不需要什么 ADO ,也不需要什么 Office 。
关于剪贴板的编程,我在这里就不累赘了,相信很多人都理解。不过我想简单说一些这个数据结构。其实一般我们复制一个矩形区域的时候,返回回来的文本,其实就是一个使用TAB 键和回车换行符分割的文本数组。这样我们只需要将这些数据写到一个 Grid 控件中,用户就可以自由选择和匹配列数据了。
我基于这个设计,加上一个可以粘贴数据的Grid 窗体,就很简单的写出了一个导入数据的功能,而且这个功能非常独立,可以使用到很多地方。
反过来,要将系统中的数据读出来的话,其实支持一下复制到剪贴板也是一个非常好好的选择。这样用户可以自由选择目标格式文件。
当然了,剪贴板这种形式也是有很多弊端的。因为只使用文本这种标准格式,所以,如果我们在导入导出过程中,需要控制或者获取有关格式信息的话,就不合适了。比如EXCEL 排版等等,就需要专业的 EXCEL 控件来操作了。
希望一点小技巧,能够给你带来些许启示。