Найти текст в Microsoft Word и заменить строковый массив Java - PullRequest
0 голосов
/ 30 декабря 2018

Я пытаюсь найти значение $beta в моем слове doc и заменить его массивом данных из моей java-программы.Данные, которые я хочу заменить, - это .......

Blue - 33 - 100
Blue - 28 - 75
Blue - 30 - 90

Я подтверждаю, что это верно, используя оператор print в приведенном ниже синтаксисе.Однако, когда я открываю свой документ word после того, как код его сохраняет, ONLY последнее значение Blue - 30 - 90 находится в документе word, а не все 3 сложены друг на друга, как в моем посте кода выше.

Как и в моем примере выше, я хочу, чтобы код отображался в документе word при замене на синтаксис 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();
    }
}

РЕДАКТИРОВАТЬ
Я следую предложению кода в ответе и использую приведенный ниже синтаксис, который на стороне JAVA имеетданные печатаются по желанию, но как только они в слове, все данные находятся в одной строке, а не в каждой отдельной строке, как я хочу

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

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

Попробуйте код ниже, он использует 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();
    }
}
0 голосов
/ 30 декабря 2018

Попробуйте это:

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