当前位置: 首页 > 知识库问答 >
问题:

复制和更改。docx表中的行

洪建茗
2023-03-14

我正在使用Apache POI处理。docx文件。

XWPFTable table = document.getTables().get(0);
XWPFTableRow copiedRow = table.getRow(0);
table.addRow(copiedRow);
XWPFTable table = document.getTables().get(0);
XWPFTableRow copiedRow = table.getRow(0);
copiedRow.getTableCells().get(0).setText("SOME MODIFICATION HERE"); // <- setting some data
table.addRow(copiedRow);
copiedRow.getTableCells().get(0).setText("SOME MODIFICATION");
XWPFTableRow newRow = new XWPFTableRow(copiedRow.getCtRow(), table);
table.addRow(newRow); 

我试着把这个例子做得尽可能少。谢谢你的帮助!

共有1个答案

帅博远
2023-03-14

您仍然在引用相同的基础数据。

ctrow确实有copy方法。因此,使用它创建一个新的XWPFTableRow:

import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;

import java.io.*;
import java.nio.file.*;

public class Main {
    public static void main(String[] args) throws IOException {
        Path documentRoot = Paths.get(System.getProperty("user.home"), "Documents");
        try (InputStream inputStream = Files.newInputStream(documentRoot.resolve("Input.docx"))) {
            XWPFDocument document = new XWPFDocument(inputStream);
            XWPFTable table = document.getTables().get(0);
            XWPFTableRow row = table.getRow(0);
            XWPFTableRow copiedRow = new XWPFTableRow((CTRow) row.getCtRow().copy(), table);
            copiedRow.getTableCells().get(0).setText("SOME MODIFICATION HERE");
            table.addRow(copiedRow);
            try (OutputStream outputStream = Files.newOutputStream(documentRoot.resolve("Output.docx"))) {
                document.write(outputStream);
            }
        }
    }
}
 类似资料:
  • 我还尝试了另一种方法:修改原始XML、解压缩docx并操作文件“word/document.XML”。当我压缩回解压缩的文件夹并将其重命名为docx时,MS Word无法打开它。

  • 问题内容: 鉴于以下Dockerfile 在复制的测试目录中,我已将文件许可权设置为770。 如果在容器内进行操作,则无法访问测试目录中的任何文件或子目录。似乎此问题与aufs文件系统中的所有权有关,在该文件系统中,复制的目录仍然由root拥有,并且权限设置为770。 是否有解决此问题的方法以正确设置权限?一种可能是在复制之前将原始目录的权限设置为容器用户的uid。但这似乎更像是一种hack。 问

  • 我们有MySQL服务器及其复制运行在另一台机器上。主从机都运行在MySQL5.6上,现在的计划是更新主从机的IP。我们计划在复制中使用下面的查询。 请确认一下上述方法是否正确,是否有足够的信息,以便在主主机ip更新的情况下进行复制。 提前道谢。

  • 我使用的是一个由渲染器对象的ObservableList支持的TableView,其设置如下: 渲染器对象非常简单,如下所示: 我有一个从UI调用的函数,通过按下按钮并包含以下内容: 我原本希望每3秒钟在每一行上看到一次对approved的更改,但它会执行所有行,并且只有在这之后才会更新UI。为什么会这样?如何更新UI?

  • 您好,我正在尝试将一个表从一个docx文件复制到另一个docx文件,但实际情况是,该表的值在新文档中的表下方和表外部被复制(请参见下面的图片) Talbe在新的docx里 正如您所见,表的值被复制到表的外部。我使用的是Libre Office,ApachePOI版本3.17,我的电脑运行的是Ubuntu 16.04 我用来执行复制的代码如下

  • 下面的代码有问题: 此代码多次复制表的第一行,然后从复制值。工作非常好(除了文本样式),除了最后一个操作符,它应该改变一些添加的表格行中的文本。此外,“foobar”字符串甚至不会出现在创建的WORD文档的document.xml中。我没有从debug中看到任何线索,因为操作符似乎只是将指针复制到它的内部行列表。此外,我在更改已存在的行时也没有遇到问题。你知道为什么会这样吗?