Replacing a text in Apache POI XWPF not working

后端 未结 5 1818
Happy的楠姐
Happy的楠姐 2020-12-11 09:20

I\'m currently trying to work on the code mentioned on a previous post called Replacing a text in Apache POI XWPF.

I have tried the below and it works but I don\'t k

5条回答
  •  情深已故
    2020-12-11 10:00

    Your logic is not quite right. You need to collate all the text in the runs first and then do the replace. You also need to remove all runs for the paragraph and add a new single run if a match on "test" is found.

    Try this instead:

    public class testPOI {
    
        public static void main(String[] args) throws Exception{
    
            String filepath = "F:\\MASTER_DOC.docx";
            String outpath = "F:\\Test.docx";
    
            XWPFDocument doc = new XWPFDocument(new FileInputStream(filepath));
            for (XWPFParagraph p : doc.getParagraphs()){
    
                int numberOfRuns = p.getRuns().size();
    
                // Collate text of all runs
                StringBuilder sb = new StringBuilder();
                for (XWPFRun r : p.getRuns()){
                    int pos = r.getTextPosition();
                    if(r.getText(pos) != null) {
                        sb.append(r.getText(pos));
                    }
                }
    
                // Continue if there is text and contains "test"
                if(sb.length() > 0 && sb.toString().contains("test")) {
                    // Remove all existing runs
                    for(int i = 0; i < numberOfRuns; i++) {
                        p.removeRun(i);
                    }
                    String text = sb.toString().replace("test", "DOG");
                    // Add new run with updated text
                    XWPFRun run = p.createRun();
                    run.setText(text);
                    p.addRun(run);
                }
            }
           doc.write(new FileOutputStream(outpath));
        }
    }
    

提交回复
热议问题