原创

POI编辑word,模板方式

最近项目有个新需求,是给领导统计数据导出成word文档。
相信数据来源大家都没有问题,通过sql或者其他手段获取即可。
三锤实验了一下,逐行去写呢,非常麻烦,尤其是使用POI设置段落格式等,很麻烦。
于是,三锤看了一些帖子发现,还是使用模板的方式比较快捷,
预先准备好一个模板,然后把关键字提取成指定的字符串,程序运行起来,替换即可。
下面贡献替换代码。
我使用的dirName,dayName举例为,E:/newExcel 和 2019-05-01
如果没有目录的话,记得创建一下哦。
huanhang的if那段代码,可以删除。(因本人特殊需要所加)
param这个Map的作用就是,key为“xxx”的替换为其值"替换的内容"

public void createReport(String dirName, String dayName, Map<String, String> param){
        //模板文件地址
        String inputUrl = dirName+ File.separator + "moban.docx";
        OutputStream os = null;
        try {
            FileInputStream in = new FileInputStream(inputUrl);
            XWPFDocument doc = new XWPFDocument(in);

            // 替换段落中的指定文字
            Iterator<XWPFParagraph> itPara = doc.getParagraphsIterator();
            while (itPara.hasNext()) {
                XWPFParagraph paragraph = (XWPFParagraph) itPara.next();
                List<XWPFRun> runs = paragraph.getRuns();
                for (int i = 0; i < runs.size(); i++) {
                    String oneparaString = runs.get(i).getText(runs.get(i).getTextPosition());
                    for (Map.Entry<String, String> entry : param.entrySet()) {
                        if(null != oneparaString) {
                            oneparaString = oneparaString.replace(entry.getKey(), entry.getValue());
                        }
                    }
                    if(StringUtils.isNotBlank(oneparaString) && oneparaString.endsWith("huanhang")){
                        oneparaString = oneparaString.replace("huanhang", "");
                        runs.get(i).setText(oneparaString, 0);
                        runs.get(i).addCarriageReturn();
                        runs.get(i).setText("\t");
                    }else{
                        runs.get(i).setText(oneparaString, 0);
                    }
                }
            }

            os = new FileOutputStream(dayName+ File.separator +"日报.docx");
            //把doc输出到输出流
            doc.write(os);
            os.close();
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {

        }
}
正文到此结束
本文目录