用程序把word模板中的一个报表复制为多个表格然后填充数据(工资

fieldset{padding:10px;}

用程序把word模板中的一个表格复制为多个表格然后填充数据(工资单的例子) 在Web系统开发的时候,对word文件的内容控制需求中,会有这样的一个需求:模板中只有一个表格,但是需要根据查询数据库记录的条数填充表格。如果是一条记录那么就把这条记录的数据填充到word模板的表格中;如果查询的是多个记录,那么需要复制多这个这样表格来填充数据。这个需求不是对一个表格行的添加,而是要求表格本身的复制。实现web系统中文件的内容的动态生成使用soaoffice就可以,估计不少人都用过这个产品,一个第三方的中间件,提供的WordResponse和WordTable对象就可以控制word文档中的内容,但是实现不了上面所说的需求,要实现上面的需求的话,还是必须用js调用soaoffice提供的office的VBA接口。WordResponse和WordTable对象应该也是soaoffice封装了一些office的VBA接口,创建了这么两个对象方便开发人员调用,实现生成文件的功能而不用学习VBA,但是上面说的那个功能没有封装为一个什么对象,只能开发人员自己用js调用VBA来处理了,期待他们以后封装一下,不然学习VBA也是个麻烦事。别拍砖,别拍砖,马上开始……Js调用SOAOffice提供的VBA接口的开始:SOAOffice的Document属性,这个属性是VBA接口的开始,就等于VBA接口中的ActiveDocument,js的写法如下:document.getElementById(“SOAOfficeCtrl”).Document VBA中的ActiveDocument可以回溯到Application对象,写法如下:document.getElementById(“SOAOfficeCtrl”).Document.Application一旦获取到Application对象以后,VBA中几乎所有的对象都就可以访问到了,对VBA了的人就不需要这里细说了,下面只具两个例子:1.给word的当前光标处添加 “Hello World”,这样写就可以了:document.getElementById(“SOAOfficeCtrl”).Document.Application.Selection.Range.Text = “Hello World”;2.全选word文件中的内容:document.getElementById(“SOAOfficeCtrl”).Document.Application.Selection.WholeStory(); 实现复制表格功能的js:function copyAll(){ var docApp = document.getElementById(“SOAOfficeCtrl”).Document.Application; docApp.Selection.WholeStory(); // 全选文档的所有内容 docApp.Selection.Copy(); // 拷贝 }或者用下面的写法,demo中用的是上面的写法,对不起懒的不想改了,自己改改吧,嘻嘻^_^:function copyTable(){ document.getElementById(“SOAOfficeCtrl”).Document.Tables(1).Select(); // 选中word中的第一个表格 document.getElementById(“SOAOfficeCtrl”).Document.Application.Selection.Copy(); // 拷贝 }粘贴拷贝的内容js,这里面用了不少光标移动的代码,必须的,为了下次粘贴做准备:function paste(){ var docApp = document.getElementById(“SOAOfficeCtrl”).Document.Application; docApp.Selection.MoveRight(1, 1); // 光标右移一下 docApp.Selection.TypeParagraph(); // 换行 docApp.Selection.Paste(); // 粘贴 docApp.Selection.Delete(); }给指定表格的指定单元格赋值的方法:function setTableValue(tableIndex, row, col, value){ var docApp = document.getElementById(“SOAOfficeCtrl”).Document.Application; docApp.ActiveDocument.Tables(tableIndex).Cell(row,col).Range.Text = value;}实际上就是一句代码,给一个word表格中的一个单元格赋值的代码如下:document.getElementById(“SOAOfficeCtrl”).Document.Tables(tableIndex).Cell(row,col).Range.Text = “Hello World”;word中表格是按照序号排的,序号从1开始,最前面的表格序号就是1,依次类推,如果说两个表格位置换了,那么他们的序号也就改变了。Word中表格不好操作,应该说是用程序控制起来麻烦,因为word中的表格没有办法用名字命名,这是相当不好的一点,这样的话一旦表格的位置发生改变,表格的序号就要改变,程序也需要跟着改变才行,可能这是soaoffice为什么没有封装这个对象的原因吧。下面说demo里的代码:Default.aspx页使用常量,直接演示复制表格填充数据的效果,可以看看这个原理。Default2.aspx 调用了数据库,复制表格和填充表格数据的js也是动态生成的,看看最终的效果吧。别说文件不能保存!是我没写,不是我不会做,OK?代码地址:http://ishare.iask.sina.com.cn/f/10696929.html抱最大的希望,为最大的努力,做最坏的打算

用程序把word模板中的一个报表复制为多个表格然后填充数据(工资

相关文章:

你感兴趣的文章:

标签云: