常常在一些论坛、网站上看到有人提问有关如何将OA、CRM 、ERP等MIS系统中数据库里的数据动态填充到Word、Excel等Office文档里的指定位置。
这种功能的实现可以利用服务器端Office自动化技术,但这种技术的弊端在于Office自动化开发起来接口调用比较麻烦,另外它的安全性、稳定性也很差。
对于Java开发还有一个方法是我们可以通过Jacob/POI/JXL技术读写文档,但这种方法生成文档的速度较慢,生成后的Office文档也无法进行在线编辑,并且接口复杂度较大。
第三种方法就是利用SOAOffice中间件。
SOAOffice的优点是编程接口简单(提供了Office简化接口模型的.Net和Java组件,屏蔽了Office的接口细节),使用服务器端编程赋值、客户端生成文件的架构,符合分布式思想,把耗用资源的部分放到了客户执行(与服务器端自动化技术比起来,使用soaoffice开发服务端无需安装、运行Office,更无需交互账户),同时解决了文件的在线打开编辑、数据填充提交的Web技术难题。
在这里,我们把Word、Excel分为两块来说,来说说利用SOAOffice如何来实现Excel的数据动态填充。
其实,在Excel中,我们通过编写简单的代码就可以将保存在系统数据库里的数据动态填充到Excel里的指定位置。
示例代码如下:
SOAOfficeX.ExcelResponse SOAExcel = new SOAOfficeX.ExcelResponse();
SOAOfficeX.IExcelResSheet sheetOrder = SOAExcel.OpenSheet("销售订单");
SOAOfficeX.IExcelResCell cell1;
cell1 = sheetOrder.OpenCell("D5");//客户名称
cell1.NeedSubmit = true;
cell1.Value = "北京竹子软件有限公司"
那么D5单元格的填充效果如下:
简单来说通过SOAOffice提供的功能可以将数据库里的数据导出到Excel格式的文档,它能够根据数据库数据生成Excel报表。
说完了Excel,我们再来说一说如何实现Word的数据动态填充。
日常工作中,我们经常会写一些类似“通知”、“公文”等固定格式的Word文档,这些文档是有固定的格式或模板的,而在这些模板里面需要我们修改(或填写)的只是某些固定位置上的数据或文字,这就用到了固定格式文件的动态生成功能。
示意代码如下:
SOAOfficeX.WordResponse SOAWord = new SOAOfficeX.WordResponse();
SOAOfficeX.IWordResDataRegion dataRegion = SOAWord.OpenDataRegion("name");
dataRegion.Value = "爱因斯坦";
执行上面的代码就可以给模板中数据区域为“name”的位置赋值为“爱因斯坦”。
模板中数据区域“name”的位置及样式如下图:
使用SOAOffice动态填充值的结果如下图:
这就是将数据库数据动态填充到Office文档指定位置通常所使用的几种方法,供参考。