首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >hwpf - poi :不可见使用poi hwpf插入doc的表。

hwpf - poi :不可见使用poi hwpf插入doc的表。
EN

Stack Overflow用户
提问于 2016-08-08 07:58:11
回答 1查看 1.1K关注 0票数 0

我想用poi在特定位置插入一个表,生成表,但是我发现这个表是不可见的。

当使用macOS及其文本工具预览或编辑此文档时,文档中生成的表是可见的,POI也可以读取表和内容。我计划上传4张图片来显示过程,但我只能发布2张图片,对不起。

代码语言:javascript
复制
@Test
public void exportDoc() throws Exception {
    FileInputStream readFile = new FileInputStream(new File(readDoc));
    FileOutputStream replaceFile = new FileOutputStream(new File(replaceDoc));
    HWPFDocument document = new HWPFDocument(readFile);
    Table table = WordUtil.insertNewTable(document,"${table}");
    insertTableInDoc(table);
    document.write(replaceFile);
    readFile.close();
    replaceFile.close();
}

private Table insertNewTable(HWPFDocument doc, String sourceValue) {
    Range range = doc.getRange();
    Table table = null;
    for (int i = 0; i < range.numSections(); ++i) {
        Section s = range.getSection(i);
        for (int x = 0; x < s.numParagraphs(); x++) {
            Paragraph p = s.getParagraph(x);
            if (p.text().contains(sourceValue)) {
                //remove target text
                range.replaceText(sourceValue, "");
                table = p.insertTableBefore((short) 3, 3);
                return table;
            }
        }
    }
    return table;
}

private void insertTableInDoc(Table table) {
    int count = 1;
    for (int rowNum = 0; rowNum < table.numRows(); rowNum++) {
        TableRow tableRow = table.getRow(rowNum);
        for (int colNum = 0; colNum < tableRow.numCells(); colNum++) {
            TableCell cell = tableRow.getCell(colNum);
            Paragraph paragraph = cell.getParagraph(0);
            CharacterRun characterRun = paragraph.getCharacterRun(0);        
            characterRun.insertBefore("number: " + count++);
        }
    }
}

PS:

我相信这不是微软对mac的问题,windows平台上文档中的生成表也是不可见的。

(第一次提问时,如果有什么问题或我的表达不清楚,请让我知道,我会立即修改。谢谢)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-12 08:57:49

根据HWPF项目的当前状态,在尝试将内容插入.doc文件时,可能会遇到麻烦。您最好的选择是使用不同的格式(docx)。

在过去的一年里,我没有看过HWPF,所以在这里我可能对HWPF目前的状况是错误的:

几年前,我正在为一个客户开发一个定制的HWPF库。自定义库的主要目标是能够修改.doc文件,而Word可以正确地处理修改过的文件。因此,我知道在多大程度上修改一个.doc文件最终可能会失败。公共HWPF库在修改时无法处理.doc文件格式的许多方面(文本框、两个字节字符范围、形状文件、嵌套表、.举几个例子。

要正确处理修改,库必须支持特定.doc文件的所有“功能”。因此,当.doc文件中有形状时,HWPF必须调整形状的位置表,即使插入了一个简单的文本片段,并且没有触及形状。如果未处理形状,Word将在打开输出文件时崩溃。

所以如果可以的话,可以使用docx或rtf。如果这是一个选项,您可以尝试一个能够处理.doc文件的商业库。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38823970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档