Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java:替换MS Word文件中的字符串_Java_Ms Word - Fatal编程技术网

使用Java:替换MS Word文件中的字符串

使用Java:替换MS Word文件中的字符串,java,ms-word,Java,Ms Word,我们需要一个Java库来替换MS Word文件中的字符串 有人能提出建议吗?试试这个: 除了替换ms word文件中的字符串外,还可以: -使用简化的API读取/写入Excel文件,如:getCell(x,y)和setCell(x,y,string) -隐藏Excel工作表(例如二次计算) -替换DOC、ODT和SXW文件中的图像 -并转换为: 文档-->pdf、html、txt、rtf xls-->pdf、html、csv ppt-->pdf,swf我建议使用Apache POI库: 看得更

我们需要一个Java库来替换MS Word文件中的字符串

有人能提出建议吗?

试试这个:

除了替换ms word文件中的字符串外,还可以: -使用简化的API读取/写入Excel文件,如:getCell(x,y)和setCell(x,y,string) -隐藏Excel工作表(例如二次计算) -替换DOC、ODT和SXW文件中的图像 -并转换为:

文档-->pdf、html、txt、rtf xls-->pdf、html、csv
ppt-->pdf,swf

我建议使用Apache POI库:


看得更多-它看起来好像没有跟上时代-嘘!不过,现在它可能已经足够完整,可以满足您的需要。

我想看看ApachePOI项目。这就是我过去用来与MS文档交互的内容

虽然ApachePOI中支持MS Word,但它不是很好。加载并保存除最基本格式之外的任何文件都可能会破坏布局。你应该试试,也许对你有用

也有很多商业图书馆,但我不知道是否有更好的

我最近在处理类似需求时不得不接受的糟糕的“解决方案”是使用格式,打开ZIP容器,读取文档XML,然后用正确的文本替换我的标记。这确实适用于替换没有段落等的简单文本位

private static final String WORD_TEMPLATE_PATH = "word/word_template.docx";
private static final String DOCUMENT_XML = "word/document.xml";

/*....*/

final Resource templateFile = new ClassPathResource(WORD_TEMPLATE_PATH);

final ZipInputStream zipIn = new ZipInputStream(templateFile.getInputStream());
final ZipOutputStream zipOut = new ZipOutputStream(output);

ZipEntry inEntry;
while ((inEntry = zipIn.getNextEntry()) != null) {
    final ZipEntry outEntry = new ZipEntry(inEntry.getName());
    zipOut.putNextEntry(outEntry);

    if (inEntry.getName().equals(DOCUMENT_XML)) {
        final String contentIn = IOUtils.toString(zipIn, UTF_8);
        final String outContent = this.processContent(new StringReader(contentIn));
        IOUtils.write(outContent, zipOut, UTF_8);
    } else {
        IOUtils.copy(zipIn, zipOut);
    }

    zipOut.closeEntry();
}

zipIn.close();
zipOut.finish();

我并不为此感到骄傲,但它确实有效。

谢谢大家。我要试试


因为我需要转换经典的DOC文件(二进制)而不是DOCX(zip格式)。

创造性的解决方案,尽管有些粗糙!对我来说非常有效。但是,您必须小心在文档中键入标记的方式。有时,Word会按marker关键字分成两个XML标记,如:
hello world。只要在不改变光标中间位置的情况下键入整个标记字,就可以正常工作。