您的位置:首页 > 其它

POI调用Word动态传参

2016-01-24 21:25 609 查看

功能描述

实现动态传参给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)
4000
);  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  POI Word 动态传参