POI写入内容到word并实现换行

时间:2024-03-14 08:23:31

一.引入相关jar

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.9</version>
</dependency>

二.编写案例

public class DocWriter {
	public static void writer(String inputSrc, String outSrc, Map<String,String> map) {

        try {
            XWPFDocument doc = new XWPFDocument(POIXMLDocument.openPackage(inputSrc));
            /**
             * 替换段落中指定的文本
             */
            for(XWPFParagraph p : doc.getParagraphs()){
                List<XWPFRun> runs = p.getRuns();
                if(runs != null){
                    for(XWPFRun r : runs){
                        //需要替换的文本
                        String text = r.getText(0);
                        //替换指定的文本
                        for(String key : map.keySet()){
                            if(text != null && text.equals(key)){
                                //替换的时候要注意,setText是有两个参数的
                                //第一个是替换的文本,第二个是从哪里开始替换
                                //0是替换全部,如果不设置那么默认就是从原文字
                                //结尾开始追加
                                // r.setText(map.get(key),0);
                            	
                            	r.addBreak();//换行
                            	r.setText(map.get(key));
                            	r.addBreak();
                            	r.setText("############");
                                
                            }
                        }
                    }
                }
            }
            /**
             * 替换表格中指定的文字
             */
            for(XWPFTable tab : doc.getTables()){
                for(XWPFTableRow row : tab.getRows()){
                    for(XWPFTableCell cell : row.getTableCells()){
                        //注意,getParagraphs一定不能漏掉
                        //因为一个表格里面可能会有多个需要替换的文字
                        //如果没有这个步骤那么文字会替换不了
                        for(XWPFParagraph p : cell.getParagraphs()){
                            for(XWPFRun r : p.getRuns()){
                                String text = r.getText(0);
                                for(String key : map.keySet()){
                                    if(text.equals(key)){
                                        r.setText(map.get(text),0);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            doc.write(new FileOutputStream(outSrc));
            System.out.println("替换完成");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws IOException, InvalidFormatException {
        Map<String, String> map = new HashMap<String, String>();
        
        
        map.put("================", "同意! CE2988/张三  2019-01-21");
       
        //文件路径
        String srcPath = "f:\\word\\needle.docx";
        //替换后新文件的路径
        String destPath = "f:\\word\\output.docx";
        writer(srcPath,destPath,map);
    }
}

三.运行结果

POI写入内容到word并实现换行