POI实现传入数据替换Word文档内容

/**
 * @param srcPath:上传文件路径
 * @param destPath:保存文件路径
 * @param map:替换内容key对应word文档替换的值,value是替换内容。
 * 例:map.put("title", "内容");
 * @author xiaojian
 *
 */
public class ReadAndWriteDoc {
public static void searchAndReplace(String srcPath, String destPath,Map<String, String> map) {  

        try {  
            XWPFDocument document = new XWPFDocument(POIXMLDocument.openPackage(srcPath));  
            /** 
             * 替换段落中的指定文字 
             */  
            Iterator<XWPFParagraph> itPara = document.getParagraphsIterator();  
            while (itPara.hasNext()) {  
                XWPFParagraph paragraph = (XWPFParagraph) itPara.next();  
                Set<String> set = map.keySet();  
                Iterator<String> iterator = set.iterator();  
                while (iterator.hasNext()) {  
                    String key = iterator.next();  
                    List<XWPFRun> run=paragraph.getRuns();  
                    for(int i=0;i<run.size();i++)  
                    {  
                        if(run.get(i).getText(run.get(i).getTextPosition())!=null &&  
                                run.get(i).getText(run.get(i).getTextPosition()).equals(key))  
                        {  
                            /** 
                             * 参数0表示生成的文字是要从哪一个地方开始放置,设置文字从位置0开始 
                             * 就可以把原来的文字全部替换掉了 
                             */  
                             run.get(i).setText(map.get(key),0); 
                        }  
                    }  
                }  
            }  
  
            /** 
             * 替换表格中的指定文字 
             */  
            Iterator<XWPFTable> itTable = document.getTablesIterator();  
            /*CharacterProperties props = new CharacterProperties(); 
            props.setFontSize(6); */


            while (itTable.hasNext()) {  
                XWPFTable table = (XWPFTable) itTable.next();  
                int count = table.getNumberOfRows();  
                for (int i = 0; i < count; i++) {  
                    XWPFTableRow row = table.getRow(i);  
                    List<XWPFTableCell> cells = row.getTableCells();  
                    for (XWPFTableCell cell : cells) {  
                        for (Entry<String, String> e : map.entrySet()) {  
                        //System.out.print(cell.getText());
                       
                            if (cell.getText().equals(e.getKey())) {
                            /**
                            * 设置特殊内容的字体大小
                            */
                            if (cell.getText().equals("公出事由:gcsy")) {
                            cell.removeParagraph(0);
                            XWPFParagraph pIO = cell.addParagraph();
                            XWPFRun rIO = pIO.createRun();
                            rIO.setFontSize(11);
                            rIO.setText(e.getValue());
                            //cell.setText(); 
}else if(cell.getText().equals("合计人民币(大写)dx¥qs")) {
cell.removeParagraph(0);
                            XWPFParagraph pIO = cell.addParagraph();
                            XWPFRun rIO = pIO.createRun();
                            rIO.setFontSize(11);
                            rIO.setText(e.getValue());
}else if(cell.getText().equals("备注bz")){
cell.removeParagraph(0);
                            XWPFParagraph pIO = cell.addParagraph();
                            XWPFRun rIO = pIO.createRun();
                            rIO.setFontSize(11);
                            rIO.setText(e.getValue());
}else {
 
                                cell.removeParagraph(0); 
                                
                                cell.setText(e.getValue());
/**
     * 设置word文档水平居中
*/
                                CTTc cttc = cell.getCTTc();
                                CTP ctp = cttc.getPList().get(0);
                                CTPPr ctppr = ctp.getPPr();
                                if (ctppr == null) {
                                    ctppr = ctp.addNewPPr();
                                }
                                CTJc ctjc = ctppr.getJc();
                                if (ctjc == null) {
                                    ctjc = ctppr.addNewJc();
                                }
                                ctjc.setVal(STJc.CENTER); //水平居中
}
                            }  
                        }  
                    }  
                }  
            }  
            FileOutputStream outStream = null;  
            outStream = new FileOutputStream(destPath);  
            document.write(outStream);  
            outStream.close();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
  
    }  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值