现在,我已经基本上用 JS 做到,将信息导出到 word 中,成功后的效果很不错。但问题是速度太慢了!
关键代码:// 从第三行开始插入
var r = 3;
for(var i = 0, i_len = exportData.length - 1; i < i_len; i++ ) {
docTble.Rows.Add();
var tmpData = exportData[i];
for(var j = 0, j_len = tmpData.length; j < j_len; j++) {
docTble.Cell(r, j + 1).Range.Text = tmpData[j];
}
r++;
}exportData 是 JS 二维数组!里面每一个值对应到表格中一个单元格!现在exportData的大小是 728 * 12。
在一个不错的电脑上测试,用时2分30秒(我本机用时5分钟)。用时太久,无论如何是达不到要求的。
想请大家帮忙,提出优化的手段!
我想到的是,一次插入一行,而不是一个单元格一个单元格的填值!但是,我不知道利用 JS,能否操作 word 表格到这个地步。
恳请各位指导!或是给在下一些相关链接看看!有描述不清楚,导致大家不好解答的,请告诉一下。
非常感谢啦!

解决方案 »

  1.   

    不要直接操作WORD
    可以把数据都准备好了之后,一次性拷贝到WORD
      

  2.   

    没错.
    楼主好像也意识到了问题是在于操作联动的刷新和其它处理太频繁了,这就象有一个会发生一连串动作的自动化机器,你本来应该是一次倒一桶豆子去加工,而现在只是一颗豆子投进去,等机器把豆子处理完,再投下一个,效率自然慢了N倍.楼主只是不太清楚有怎样"集中化"的处理方法吧.
    通过平时的操作经验,你会发现,从网页或文本编辑器中复制一些内容再粘贴进WORD时,会自动为你格式化成类似原样的结构,包括表格.
    所以你只要在JS中创建一个TABLE,并对这个TABLE添加行列和内容.之后复制到剪贴板,再对WORD对象进行粘贴就可以了.
      

  3.   

    多谢两位的指点!
    我现在是在做导出的功能,把网页上的东西导出到word中,由于之前设计上的问题,导致用不了finereport(我也不熟这个技术)。用JS倒是可以解决这个问题,而且效果不赖,就是性能惨不忍睹。我之前是直接用JS从网页上取值的,然后填到表格中,用时足足20分钟。后来优化成后台将数据封装成一个二维数组传给前台,再用JS填充到word中。我现在在看着如何在后台直接生成word。
    奥,我用的是Java语言。好像 jacob 不错。
      

  4.   

    jacob 是个坑爹的东西,只能用在windows下,其原理和你在前端用是一样的,需要服务器安装word,
    那种破玩意没有任何使用价值。有几个服务器是windows系统啊,还安装word。就算装了,链接数一多
    肯定崩溃。我原来的做法是写一个word模板,模板中需要有一个vba,然后当用户打开这个word是这个VBA会运行
    并从word中某个位置读取数据,然后处理,最后将读取的数据删除。这样能保证这个VBA只运行一次。
    之后只要用poi之类的java类库往约定的位置写数据就行了,写完之后将模板另存为要到处的文件了。
    这是通用处理方案,理论上只有vba能运行任何效果都能做出来。
      

  5.   

    可以参考一下我们做的一个功能。
    需求:根据用户填入的数据打印一张表给用户签字。
    设计:先用word做一个模版,保存为xml文件,加入freeer标签。从数据库取出数据后,用freeer填到已有格式的表中,然后生成WORD,供客户端下载。优点:速度快,无需任何第三方WORD操作框架
    缺点:在后台完成,需下载后打开文件再打印
      

  6.   

    多谢指点!我查资料时,看到过freeer的解决方案! 可我现在需要向word的表格中动态添加数据,可以做到这个吗 ??
    word中表格的前两行是已经格式化好的了。
      

  7.   

    我用 jacob 实现了功能,执行用时太长,效果不理想!
    我现在封装两个数据集传给word模板。一个是与word中书签相对应的,Map<String, String>,第二个是向word中的表格填充数据的 String[][]二维数据。请问您有什么好的建议吗 ?VBA变成我不太会用,有帮助我解决上述问题的类似的教程吗!不好意思我有点急功近利了,主要是这个问题的解决还是挺着急的!
      

  8.   

    我对标记语言有一些概念!不过我不熟悉freemkker.嗯,好的,我在去看下吧!
      

  9.   

    嗯,我把 freeer 的功能,想的弱了! 无知真可怕啊多谢各位的指点