POI调用Word动态传参

功能描述

实现动态传参给Word模板,然后替换模板中的参数,最后生成目的文档;

传入参数分别是源文件路径,目的文件路径和匹配MAP

2实现所需JAR包

poi-scratchpad-3.8-20120326.jar(文档最后有提供)

3代码实现:

// 替换word中需要替换的特殊字符 

    public static booleanreplaceWord(String srcPath, 

            String destPath,Map<String, String> map) { 

        String[] sp =srcPath.split("\\."); 

        String[] dp =destPath.split("\\."); 

        if ((sp.length > 0)&& (dp.length > 0)) {// 判断文件有无扩展名 

            // 比较文件扩展名 

            if (sp[sp.length -1].equalsIgnoreCase("docx")) { 

                try { 

                   XWPFDocument document = new XWPFDocument( 

                           POIXMLDocument.openPackage(srcPath)); 

                    // 替换段落中的指定文字 

                   Iterator<XWPFParagraph> itPara = document 

                           .getParagraphsIterator(); 

                   

                   

                    while(itPara.hasNext()) { 

                            

                               XWPFParagraph paragraph = (XWPFParagraph)itPara.next(); 

                             String str=  paragraph.getText();

                        for(Map.Entry<String, String> entry : map 

                                           .entrySet()) { 

                                 str = str.replace( 

                           entry.getKey(), entry.getValue()); 

                        }

                         List<XWPFRun> runs = paragraph.getRuns(); 

                          for(int i = 0; i < runs.size(); i++) {

                                   if(runs.get(i)!=null){

                                             runs.get(i).setText("",0); //将所有的XWPFRun都置空

                                   }

                                   if(i==0){

                                             runs.get(i).setText(str,0); //将第一个XWPFRun的值存整个XWPFParagraph的字符串

                                   }

                         } 

                    } 

                   //  替换表格中的指定文字 

                   Iterator<XWPFTable> itTable = document.getTablesIterator();  

                    while(itTable.hasNext()) { 

                       XWPFTable table = (XWPFTable) itTable.next(); 

                        intrcount = table.getNumberOfRows(); 

                        for(int i = 0; i < rcount; i++) { 

                           XWPFTableRow row = table.getRow(i); 

                           List<XWPFTableCell> cells = row.getTableCells(); 

                           for (XWPFTableCell cell : cells) { 

                               String cellTextString = cell.getText(); 

                               for (Entry<String, String> e : map.entrySet()) { 

                                   if (cellTextString.contains(e.getKey())) 

                                       cellTextString = cellTextString 

                                               .replace(e.getKey(), 

                                                       e.getValue()); 

                               } 

                               cell.removeParagraph(0); 

                                cell.setText(cellTextString); 

                           } 

                        } 

                    } 

                   FileOutputStream outStream = null; 

                    outStream= new FileOutputStream(destPath); 

                   document.write(outStream); 

                   outStream.close(); 

                    returntrue; 

                } catch(Exception e) { 

                   e.printStackTrace(); 

                    returnfalse; 

                } 

            } else 

                     { 

                returnfalse; 

            } 

        } else { 

            return false; 

        } 

    } 

调用参考如下:

String filepathString = "D:/2.docx"; 

        String destpathString= "D:/2ttt.docx"; 

        Map<String,String> map = new HashMap<String, String>(); 

       map.put("${BANKNAME}", "中信"); 

       map.put("${BANK}", "中信银行"); 

       map.put("${TRANNAME}", "test");

        map.put("${LAWYER}","test");

       map.put("${YEAR}", "2015"); 

       map.put("${MONTH}", "09"); 

       map.put("${DAY}", "14"); 

       System.out.println(replaceWord(filepathString, 

               destpathString, map));  

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周凡首

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值