热门标签 | 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内容》

 

 


推荐阅读
  • 字节流(InputStream和OutputStream),字节流读写文件,字节流的缓冲区,字节缓冲流
    字节流抽象类InputStream和OutputStream是字节流的顶级父类所有的字节输入流都继承自InputStream,所有的输出流都继承子OutputStreamInput ... [详细]
  • oracle c3p0 dword 60,web_day10 dbcp c3p0 dbutils
    createdatabasemydbcharactersetutf8;alertdatabasemydbcharactersetutf8;1.自定义连接池为了不去经常创建连接和释放 ... [详细]
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • MySQL初级篇——字符串、日期时间、流程控制函数的相关应用
    文章目录:1.字符串函数2.日期时间函数2.1获取日期时间2.2日期与时间戳的转换2.3获取年月日、时分秒、星期数、天数等函数2.4时间和秒钟的转换2. ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 属性类 `Properties` 是 `Hashtable` 类的子类,用于存储键值对形式的数据。该类在 Java 中广泛应用于配置文件的读取与写入,支持字符串类型的键和值。通过 `Properties` 类,开发者可以方便地进行配置信息的管理,确保应用程序的灵活性和可维护性。此外,`Properties` 类还提供了加载和保存属性文件的方法,使其在实际开发中具有较高的实用价值。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 题目解析给定 n 个人和 n 种书籍,每个人都有一个包含自己喜好的书籍列表。目标是计算出满足以下条件的分配方案数量:1. 每个人都必须获得他们喜欢的书籍;2. 每本书只能分配给一个人。通过使用深度优先搜索算法,可以系统地探索所有可能的分配组合,确保每个分配方案都符合上述条件。该方法能够有效地处理这类组合优化问题,找到所有可行的解。 ... [详细]
  • 本文详细介绍了Java反射机制的基本概念、获取Class对象的方法、反射的主要功能及其在实际开发中的应用。通过具体示例,帮助读者更好地理解和使用Java反射。 ... [详细]
  • 本文将带你快速了解 SpringMVC 框架的基本使用方法,通过实现一个简单的 Controller 并在浏览器中访问,展示 SpringMVC 的强大与简便。 ... [详细]
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社区 版权所有