在Microsoft Word中查找文本并替换为Java字符串数组

时间:2018-12-29 22:36:22

标签: java replace ms-word apache-poi

我正在尝试在单词doc中找到值if (process.env.NODE_ENV === 'dev') { // Your dev-only logic goes here } ,并用Java程序中的数据数组替换。我要替换的数据是 .......

$beta

我通过使用以下语法中的print语句验证这是正确的。但是,当我在保存代码后打开Word文档时,是最后一个值Blue - 33 - 100 Blue - 28 - 75 Blue - 30 - 90 在Word文档中,而不是像我上面的代码中一样,所有3个值彼此堆叠。

就像上面的示例一样,这就是当我希望代码被替换为java语法时,如何将其显示在word文档中。该如何读取代码才能实现这一目标?

Blue - 30 - 90

编辑
我按照答案中的代码建议进行操作,并使用下面的语法,在Java方面,该数据可以按需要打印数据,但是一旦写成文字,所有数据都在一行上,而不是像我一样在单独一行上欲望

public static void Test() {
    String valuetowrite = null;
    for (SPData data : qryresults) {
        valuetowrite = String.join("\r\n", data.toString());
        System.out.println(valuetowrite);
    }
    try {
        XWPFDocument doc = new XWPFDocument(OPCPackage.open(SOURCE_FILE));
        for (XWPFParagraph p : doc.getParagraphs()) {
            List<XWPFRun> runs = p.getRuns();
            if (runs != null) {
                for (XWPFRun r : runs) {
                    String text = r.getText(0);
                    if (text != null) {
                        if (text.contains("$beta")) {
                            text = text.replace("$beta", valuetowrite);
                            r.setText(text, 0);
                        }
                    }
                }
            }
        }
        doc.write(new FileOutputStream(OUTPUT_FILE));
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

2 个答案:

答案 0 :(得分:2)

尝试下面的代码,它使用的是r.addBreak();,它将根据需要添加一个换行符。

private static void WriteToWordWithLineBreak() {
    ArrayList<String> datatowrite = new ArrayList<String>();
    for (SPData data : qryresults) {
        datatowrite.add(data.toString());
    }
    try {
        XWPFDocument doc = new XWPFDocument(OPCPackage.open(SOURCE_FILE));
        for (XWPFParagraph p : doc.getParagraphs()) {
            System.out.println("Found paragraph "+p);
            List<XWPFRun> runs = p.getRuns();
            if (runs != null) {
                for (XWPFRun r : runs) {
                    String text = r.getText(0);
                    if (text != null) {
                        if (text.contains("$beta")) {
                            r.setText(datatowrite.get(0), 0);
                            for (int i=1; i < datatowrite.size(); i++){
                                r.addBreak();
                                r.setText(datatowrite.get(i));
                            }
                        }
                    }
                }
            }
        }
        doc.write(new FileOutputStream(OUTPUT_FILE));
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

答案 1 :(得分:0)

尝试一下:

String valuetowrite = "";
for (SPData data : qryresults) {
    valuetowrite = valuetowrite + String.join("\r\n", data.toString());
}
System.out.println(valuetowrite);