热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javapoi替换word内容

以上数据为替换部分的数据。以上为模版内容  **      *       *@paramparams需要替换的

《java poi 替换word内容》

以上数据为替换部分的数据。

《java poi 替换word内容》

以上为模版内容

 

 

/**
         * 
         * @param params  //需要替换的文字。
         * @param wgylist1 //生成表格的list
         * @param lzlist1   //生成表格的list
         * @param dateStr  
         * @param fileName
         * 读取模版内容,替换模版内的文字。并在模版后生成表格。
         */

private void download(Map params,List> wgylist1,List> lzlist1,String dateStr,String fileName){
            XwpfTUtil xwpfTUtil = new XwpfTUtil();      
               XWPFDocument doc = null;
               InputStream is = null;
               try {

     //根据文件的项目路径,获得文件的系统路径。
                   String path = ExportExcelHelper.class.getResource(“/template”+File.separatorChar+”statistics.docx”).getPath();
                   is = new FileInputStream(path);
                   doc = new XWPFDocument(is);
                   xwpfTUtil.replaceInPara(doc, params); 
                   ExportWordHelper ewp=new ExportWordHelper();
                   ewp.ExportWord(wgylist1, lzlist1,doc,dateStr);   

                 //  uploadsDir为项目中配置的路径。             
                   File dir = new File(uploadsDir+”/uploads/weekly”);
                   if (!dir.exists()) {// 判断文件目录是否存在
                        dir.mkdirs();
                    }  

      //下载文件到硬盘                
                   FileOutputStream os = new FileOutputStream(uploadsDir+”/uploads/weekly/”+fileName+”.docx”);
                   doc.write(os);
                   xwpfTUtil.close(is);
                   xwpfTUtil.close(os);
               } catch (Exception e) {
                   e.printStackTrace();                   
               }  
        }

 

 

 

 

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;

public class XwpfTUtil {
     /** 
     * 替换段落里面的变量 
     * 
     * @param doc    要替换的文档 
     * @param params 参数 
     */  
    public void replaceInPara(XWPFDocument doc, Map params) {  
        Iterator iterator = doc.getParagraphsIterator(); 
        XWPFParagraph para;  
        while (iterator.hasNext()) {
            para = iterator.next();  
            this.replaceInPara(para, params);
        }  
        
    }  
    
    /** 
     * 替换段落里面的变量 
     * 
     * @param para   要替换的段落 
     * @param params 参数 
     */    
   public void replaceInPara(XWPFParagraph para, Map params) {  
       List runs;  
        Matcher matcher;  
        if (this.matcher(para.getParagraphText()).find()) {
            runs = para.getRuns();               
            int start = -1;  
            int end = -1;  
            String str = “”;  
            for (int i = 0; i                 XWPFRun run = runs.get(i);  
                String runText = run.toString().trim();  
                if(!””.equals(runText)){
                    if (‘$’ == runText.charAt(0)&&'{‘ == runText.charAt(1)) {  
                        start = i;  
                    }  
                    if ((start != -1)) {  
                        str += runText;  
                    } 
                    if (‘}’ == runText.charAt(runText.length() – 1)) {  
                        if (start != -1) {  
                            end = i;  
                            break;  
                        }  
                    }
                }
            } 
           if(start!=-1){
               for(int i=start;i                    para.removeRun(start); 
               }
               XWPFRun createRun = para.insertNewRun(start);
               for (String key : params.keySet())  {
                   if (str.equals(key)) {  
                       createRun.setText((String) params.get(key));
                       createRun.setFontSize(16);
                       createRun.addBreak();
                       break;  
                   }  
               } 
           }
             
              
        }        
    }  
    
    /** 
     * 正则匹配字符串 
     * 
     * @param str 
     * @return 
     */  
    private Matcher matcher(String str) {  
        Pattern pattern = Pattern.compile(“\\$\\{(.+?)\\}”, Pattern.CASE_INSENSITIVE);  
        Matcher matcher = pattern.matcher(str);  
        return matcher;  
    }  
    /** 
     * 关闭输入流 
     * 
     * @param is 
     */  
    public void close(InputStream is) {  
        if (is != null) {  
            try {  
                is.close();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
    }  
    /** 
     * 关闭输出流 
     * 
     * @param os 
     */  
    public void close(OutputStream os) {  
        if (os != null) {  
            try {  
                os.close();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
    }
}
 

 

 

 

 

import java.math.BigInteger;
import java.util.List;
import java.util.Map;

import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSectPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth;

public class ExportWordHelper {
   //导出表格到word
    /**
     * 
     * @param statisticalGridman  中山区网格员上报案件排名 
     * @param totalGridman 有多少人没上报过案件
     * @return
     * @throws Exception
     */
    public XWPFDocument ExportWord(List> wgylist1,List> lzlist1,XWPFDocument document,String dateStr)throws Exception{
        //两个表格之间加个换行  
        XWPFParagraph paragraph = document.createParagraph();  
        XWPFRun paragraphRun = paragraph.createRun();  
        paragraphRun.setText(“\r”);  
        
        //添加标题,
        XWPFParagraph titleParagraph = document.createParagraph();  
        //设置段落居中  
        titleParagraph.setAlignment(ParagraphAlignment.CENTER);  
  
        XWPFRun titleParagraphRun = titleParagraph.createRun();  
        titleParagraphRun.setText(dateStr+”此处为表格的标题部分”);  
        titleParagraphRun.setColor(“000000”);  
        titleParagraphRun.setFontSize(24); 
        titleParagraphRun.setFontFamily(“宋体”);
        //换行  
        XWPFParagraph paragraph1 = document.createParagraph();  
        XWPFRun paragraphRun1 = paragraph1.createRun();  
        paragraphRun1.setText(“\r”);  
        //表格部分
        XWPFTable ComTable = document.createTable();  
        //列宽自动分割  
        CTTblWidth comTableWidth = ComTable.getCTTbl().addNewTblPr().addNewTblW();  
        comTableWidth.setType(STTblWidth.DXA);  
        comTableWidth.setW(BigInteger.valueOf(9072));   
        //表格第一行  
        XWPFTableRow comTableRowOne= ComTable.getRow(0);  
        comTableRowOne.getCell(0).setText(“序号”);  
        comTableRowOne.addNewTableCell().setText(“测试”);  
        comTableRowOne.addNewTableCell().setText(“测试”);  
        comTableRowOne.addNewTableCell().setText(“测试”);  
        comTableRowOne.addNewTableCell().setText(“测试”);  
        comTableRowOne.addNewTableCell().setText(“测试”);  
        comTableRowOne.addNewTableCell().setText(“测试”);  
        comTableRowOne.addNewTableCell().setText(“测试”); 
        for(int i=0;i             Map map = wgylist1.get(i);
            XWPFTableRow comTableRow = ComTable.createRow(); 
            comTableRow.getCell(0).setText(“”+(i+1));
            comTableRow.getCell(1).setText((String)map.get(“JD”));
            comTableRow.getCell(2).setText((String)map.get(“SQ”));
            comTableRow.getCell(3).setText((String)map.get(“NAME”));
            comTableRow.getCell(4).setText(String.valueOf(map.get(“CODE”)));
            comTableRow.getCell(5).setText(String.valueOf(map.get(“AJZS1”)));
            comTableRow.getCell(6).setText(String.valueOf(map.get(“XCDWS1”)));
            comTableRow.getCell(7).setText(String.valueOf(map.get(“XCCS1”)));
        } 
        //换行  
        XWPFParagraph paragraph2 = document.createParagraph();  
        XWPFRun paragraphRun2 = paragraph2.createRun();  
        paragraphRun2.setText(“\r”);         
    /**
     * 设置字体样式
     * @param cell
     * @param text 
     * @throws Exception
     */
    public  void setCellText(XWPFTableCell cell,String text) throws Exception{  
        XWPFParagraph cellP=cell.getParagraphs().get(0);  
        XWPFRun cellR = cellP.createRun();  
        cellR.setText(text);  
        cellR.setFontFamily(“宋体”);
        cellR.setBold(true);
        cellR.setFontSize(9);
    }
    
    /**
     * 跨列合并   表格的下标是从0开始的
     * @param table 操作的是哪个表格
     * @param col  在第几行合并 
     * @param fromRow 在哪个列上开始合并
     * @param toRow  在哪个列上结束合并
     */
     public  void mergeCellsVertically(XWPFTable table, int col, int fromRow, int toRow) {  
            for (int i = fromRow; i <= toRow; i++) {  
                XWPFTableCell cell = table.getRow(i).getCell(col);
                if ( i == fromRow ) {  
                    cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART);  
                } else {  
                    cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);  
                }  
            }  
        }
    /**
     * 跨行合并   表格的下标是从0开始的
     * @param table 操作的是哪个表格
     * @param row 在第几列合并 
     * @param fromCell 在哪个行上开始合并
     * @param toCell  在哪个行上结束合并
     */
    public  void mergeCellsHorizontal(XWPFTable table, int row, int fromCell, int toCell) {  
        for (int i = fromCell; i <= toCell; i++) {  
            XWPFTableCell cell = table.getRow(row).getCell(i);  
            if ( i == fromCell ) {  
                cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);  
            } else {  
                cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);  
            }  
        }  
    } 
       

}
 

运行结果如下

《java poi 替换word内容》

 

 


推荐阅读
  • 巧用arguments在Javascript的函数中有个名为arguments的类数组对象。它看起来是那么的诡异而且名不经传,但众多的Javascript库都使用着它强大的功能。所 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • 小程序wxs中的时间格式化以及格式化时间和date时间互转
    本文介绍了在小程序wxs中进行时间格式化操作的问题,并提供了解决方法。同时还介绍了格式化时间和date时间的互相转换的方法。 ... [详细]
  • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
  • 正则表达式及其范例
    为什么80%的码农都做不了架构师?一、前言部分控制台输入的字符串,编译成java字符串之后才送进内存,比如控制台打\, ... [详细]
  • C语言的经典程序有哪些
    本篇内容介绍了“C语言的经典程序有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
author-avatar
小王儿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有