最近又被那个从PowerBuilder往Excel里导数据的事儿给搞得有点头大。你也知道,咱们做这行的,客户总有这种需求,要把系统里看到的数据弄到Excel里去自己再加工加工。PowerBuilder自带那个SaveAs,格式丢得一塌糊涂,数字变成文本,日期格式不对,用户那边意见老大。
之前也试过用OLE去操作Excel,那玩意儿是灵活,但写起来贼麻烦,而且用户电脑上Excel版本不一样,或者没装啥的,就直接报错,维护起来心累。所以就想着找个省事点的法子。
开始找办法
后来在网上瞎逛,看到有人提到一个叫dw2xls的东西,说是个专门解决DataWindow导出Excel问题的控件,看起来像是个pbl文件,可以直接集成到PB项目里。这听起来靠谱,不用自己写那么多代码,集成一下调用个函数就行,这不就是我想要的嘛
然后就开始找这个文件。网上搜搜,发现这东西好像还是个第三方做的,版本也有点杂。找个看起来还算靠谱的版本下载下来。
实际用起来
拿到那个pbl文件后,第一步就是把它加到我那个PB项目的Library List里面去。这个操作倒是简单,右键点一下Target,选Properties,然后在Library那个标签页里把pbl文件加进去,重新编译一下项目就行。
接着就是在需要导出功能的地方开始写代码。大致过程是这样的:
- 先得创建对象:因为它是个pbl里的东西,通常里面会封装一个非可视对象(NVO),或者是一个可以放在窗口上的控件。我看我找的这个版本,好像是提供一个NVO。先得在代码里声明一个这个NVO类型的变量,然后 `CREATE` 一个实例出来。类似这样:
n_dw2xls lnvo_dw2xls
然后lnvo_dw2xls = CREATE n_dw2xls
。 - 调用导出函数:创建好对象实例后,就可以调用它提供的方法。我看一下,它里面应该有个类似 `of_ExportToExcel` 或者 `of_SaveAsExcel` 这样的函数。调用的时候,一般要把你要导出的那个DataWindow控件作为参数传给它,还得告诉它导出的文件想保存成什么名字,放哪个路径。
- 设置一些选项:有的dw2xls版本可能还提供一些参数,让你能稍微控制一下导出的细节,比如是不是要带表头,要不要保持列宽之类的。我这个版本好像还能选,是导出成老的`.xls`格式,还是新的`.xlsx`格式。我试下,直接导出xlsx格式,这样用户用新版Office打开也方便,省得他们自己再去转换。
写好代码,放个按钮在界面上,点击按钮就触发这一套导出逻辑。
效果和感受
测试一下,点按钮,稍微等一下下,Excel文件就生成出来。打开看看效果:
比自带的SaveAs强太多! 数据的行列基本都能对齐,数据类型也大部分保留原来的样子,数字还是数字,文本还是文本。至少看起来像个正经表格。
也不是说完美无缺。遇到那种特别复杂的DataWindow,比如有嵌套报表或者分组特别多的,有时候导出来的格式可能还是需要稍微手动调整一下才好看。但对于大多数常规的列表或者报表数据,效果是完全够用,大大减轻用户抱怨和咱们自己擦屁股的工作量。
速度方面,感觉比OLE快不少,导个几千条数据,也就几秒钟的事儿,用户体验上好多。
这个dw2xls控件确实是个挺实用的工具。虽然可能是个有些年头的东西,但在解决PB导出Excel这个问题上,简单直接有效。如果你也还在为PB导出Excel头疼,不妨找找这个dw2xls试试看,确实能省不少事儿。