国产linux系统(银河麒麟,统信uos)使用 PageOffice 国产版在线实现 word 文档中的Table表格插入新行并赋值

PageOffice 国产版 :支持信创系统,支持银河麒麟 V10 和统信 UOS,支持 X86(intel、兆芯、海光等)、ARM(飞腾、鲲鹏、麒麟等)、longarch 芯片架构。

查看本示例演示效果

本示例关键代码的编写位置
Vue+Springboot

注意
本文中展示的代码均为关键代码,复制粘贴到您的项目中,按照实际的情况,例如文档路径,用户名等做适当修改即可使用。

在项目的开发中会遇到这样的需求:要求在生成 word 文件的时候,需要给表格赋值,但是表格行数不固定,需要根据数据库中的数据记录实现数据填充。通过调用 PageOffice 动态添加行的功能,就可以实现此需求。

比如一个下图所示的 Word 表格文件:
image
使用本文“后端代码”对表格做数据填充后的效果如下图所示:
image

注意
Word 中的 table 是要借助数据区域(DataRegion)实现的,要求数据区域完整的包含了整个 Table 的内容,这样才可以通过数据区域控制和操作 table。因此,要想使用 table,则必须在 word 文件中插入书签。而 table 的插入,既可以在 Word 模版中书签处手动插入:工具栏“插入”→“表格”,亦可以在程序中通过数据区域动态添加。

后端代码

    PageOfficeCtrl poCtrl = new PageOfficeCtrl(request);
WordDocument doc = <span class="hljs-keyword">new</span> WordDocument();
<span class="hljs-comment">//打开数据区域</span>
DataRegion dataRegion = doc<span class="hljs-variable">.openDataRegion</span>(<span class="hljs-string">"PO_regTable"</span>);
<span class="hljs-comment">//打开table,openTable(index)方法中的index代表Word文档中table位置的索引,从1开始</span>
Table <span class="hljs-keyword">table</span> = dataRegion<span class="hljs-variable">.openTable</span>(<span class="hljs-number">1</span>);

<span class="hljs-comment">//给table中的单元格赋值, openCellRC(int,int)中的参数分别代表第几行、第几列,从1开始</span>
<span class="hljs-keyword">table</span><span class="hljs-variable">.openCellRC</span>(<span class="hljs-number">3</span>, <span class="hljs-number">1</span>)<span class="hljs-variable">.setValue</span>(<span class="hljs-string">"A公司"</span>);
<span class="hljs-keyword">table</span><span class="hljs-variable">.openCellRC</span>(<span class="hljs-number">3</span>, <span class="hljs-number">2</span>)<span class="hljs-variable">.setValue</span>(<span class="hljs-string">"开发部"</span>);
<span class="hljs-keyword">table</span><span class="hljs-variable">.openCellRC</span>(<span class="hljs-number">3</span>, <span class="hljs-number">3</span>)<span class="hljs-variable">.setValue</span>(<span class="hljs-string">"李清"</span>);

<span class="hljs-comment">//插入一行,insertRowAfter方法中的参数代表在哪个单元格下面插入一个空行</span>
<span class="hljs-keyword">table</span><span class="hljs-variable">.insertRowAfter</span>(<span class="hljs-keyword">table</span><span class="hljs-variable">.openCellRC</span>(<span class="hljs-number">3</span>, <span class="hljs-number">3</span>));

<span class="hljs-keyword">table</span><span class="hljs-variable">.openCellRC</span>(<span class="hljs-number">4</span>, <span class="hljs-number">1</span>)<span class="hljs-variable">.setValue</span>(<span class="hljs-string">"B公司"</span>);
<span class="hljs-keyword">table</span><span class="hljs-variable">.openCellRC</span>(<span class="hljs-number">4</span>, <span class="hljs-number">2</span>)<span class="hljs-variable">.setValue</span>(<span class="hljs-string">"销售部"</span>);
<span class="hljs-keyword">table</span><span class="hljs-variable">.openCellRC</span>(<span class="hljs-number">4</span>, <span class="hljs-number">3</span>)<span class="hljs-variable">.setValue</span>(<span class="hljs-string">"张三"</span>);

poCtrl<span class="hljs-variable">.setWriter</span>(doc);

<span class="hljs-comment">//webOpen的第一个参数支持能够输出下载文件的Url相对地址或者文件在服务器上的磁盘路径两种方式</span>
poCtrl<span class="hljs-variable">.webOpen</span>(<span class="hljs-string">"D:\\template1.docx"</span>, OpenModeType<span class="hljs-variable">.docNormalEdit</span>, <span class="hljs-string">"张三"</span>);