Ms word JavaApachePOI将新行添加到现有表中。Word文档

Ms word JavaApachePOI将新行添加到现有表中。Word文档,ms-word,apache-poi,hwpf,Ms Word,Apache Poi,Hwpf,我正在尝试向MS Word文档中的现有表添加新行。我使用POI 3.10,hwpf库。但在执行此程序后,文件崩溃,MS Word会发出警告消息。所有内容看起来都很奇怪,而且没有格式化 样本如下: InputStream fin = new FileInputStream(args[0]); POIFSFileSystem fs = new POIFSFileSystem(fin); HWPFDocument doc = new HWPFDocument(fs); Ran

我正在尝试向MS Word文档中的现有表添加新行。我使用POI 3.10,hwpf库。但在执行此程序后,文件崩溃,MS Word会发出警告消息。所有内容看起来都很奇怪,而且没有格式化

样本如下:

InputStream fin = new FileInputStream(args[0]);
    POIFSFileSystem fs = new POIFSFileSystem(fin);

    HWPFDocument doc = new HWPFDocument(fs);
    Range range = doc.getRange();

    range.getParagraph(269).insertAfter("TEST");
    doc.write(new FileOutputStream("SOME PATH"));

也许应该更新一些附加内容(例如SI、DSI),因为添加了新的CharacterRun?

Word97/2000格式的文档文件仅在HWPF的简单变体中受支持。表已经很重要了。如果Word拒绝了您使用库创建/修改的文件,那么您可能运气不好

不久前,我为一位客户开发了一个基于Apache的HWPF代码库的定制库。该自定义库增加了对许多功能的支持,可以可靠地编写Word文件。把所有这些事情做好是一项艰巨的工作。因此,仅仅解决一些小问题是不可能的。你得花几个月的时间

您是否可以选择在Word中创建空行并用HWPF填充它们

编辑:可能的功能解决方案:

用标记预先填充表格:

+--------+-------------+------------------------------------+
| Rev 1  |  2014-01-01 | Created document                   |
+--------+-------------+------------------------------------+
| Rev 2  |  2014-01-02 | Corrected flow chart               |
+--------+-------------+------------------------------------+
| $REVMRK|  $REVDATE## | $REVTEXT########################## |
+--------+-------------+------------------------------------+
| $REVMRK|  $REVDATE## | $REVTEXT########################## |
+--------+-------------+------------------------------------+
| $REVMRK|  $REVDATE## | $REVTEXT########################## |
+--------+-------------+------------------------------------+
| $REVMRK|  $REVDATE## | $REVTEXT########################## |
+--------+-------------+------------------------------------+
确保标记足够长。(在HWPF中添加文本,以便表格中段落地址的更改可能会导致问题。)

要填充行,请执行以下操作:

  • 查找一行的标记集
  • 每个标记必须包含所有后续的#-字符
  • 为每个标记准备要填写的文本
  • 确保文本仅使用ASCII字符(见下文)
  • 确保文本长度不超过修订标记
  • 用新内容填充修订标记,并用空格填充剩余的#-字符
  • 如果软件找不到新行,则必须有人在Word中添加新行模板

    一些限制的原因是:

    无插入:许多内容都与地址一起存储到文本流中(许多内部额外表包含文本内容上的地址引用)。这适用于段落边框、字符格式、表格标记、书签、图形参考等。HWPF涵盖了一些内容,但很多内容没有。如果插入文本,地址可能会移动,Word文件可能会损坏

    ASCII范围:文本序列存储为每个字符1字节或每个字符2字节。正确操作时,在1字节范围内插入非ASCII字符需要将该范围转换为2字节范围。这在HWPF中并不总是很好,它会导致地址移动(请参阅上面的“无插入”)

    如果您的文档“更简单”,则可能会受到一些限制。例如:没有文本框更好。没有嵌入式图形更好。没有嵌套表更好。但是,通常限制非常严格,因此您可以使用纯文本文档并为其提供.doc扩展名


    如果您需要更多详细信息,请告诉我。

    发出的警告消息是什么?您好,消息听起来像:“此文档中的一个表已损坏。”感谢Rainer提供信息。这个程序的目的是更新现有文档中的修订历史,修订历史章节是一个表格。我需要用新信息更新这个表格。你有什么建议吗?嗨@Rainer,好主意,我需要和一位客户协商,这样对他合适吗。还有一个问题,有没有可能用这种方式来解决这个问题:嗨@Rainer,好主意,我需要和一位客户协商,他觉得可以吗。还有一个问题,有没有可能用这种方式来解决这个问题:1。创建空的.doc文件。2创建HPWFdocument实例,空文件作为输入。3.创建段落实例,从文件(源文件)复制文本和属性,直到到达插入新文本后的行。4.使用一些新文本和属性创建新段落实例。继续创建新实例和处理属性,直到到达文件末尾。6.使用内部方法“write(OutputStream)”保存HPWFdocument实例。有可能吗,你怎么想?感谢您的帮助:)我尝试了此解决方案,但在保存后,文档仍然崩溃。。。我使用character.replace()方法将标记替换为新文本。当我试图用MS Word打开此文件时,我收到这样的消息:“此错误消息可能因多种原因出现。文档可能已损坏或损坏。请使用“恢复文本转换器”或“打开并修复”功能。这两种功能均可从“打开”对话框中获得。”