主要实现了按照模版行的样式填充数据,针对的是动态数据,静态数据可以直接替换变量实现,先说下缺点:1)暂未实现特殊样式填充(如列合并(跨行合并)),只能用于普通样式(如段落间距 缩进 字体 对齐)2)数据行插到模版行下面,没有实现指定位置插入

直接上代码:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;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.CTFonts;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTInd;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSpacing;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;public class POI_表格_按模版样式填充数据_S3_Test {public static void main(String[] args) throws Exception {POI_表格_按模版样式填充数据_S3_Test t = new POI_表格_按模版样式填充数据_S3_Test();t.insertDataToTable("f:/saveFile/temp/sys_s3_template.docx", 3, false);}public void insertDataToTable(String filePath, int tableSize,boolean isDelTmpRow) throws Exception {InputStream is = new FileInputStream(filePath);XWPFDocument doc = new XWPFDocument(is);List<List<String>> resultList = generateTestData(4);insertValueToTable(doc, resultList, tableSize, isDelTmpRow);saveDocument(doc, "f:/saveFile/temp/sys_" + System.currentTimeMillis()+ ".docx");}/*** @Description: 按模版行样式填充数据,暂未实现特殊样式填充(如列合并),只能用于普通样式(如段落间距 缩进 字体 对齐)* @param resultList  填充数据* @param tableRowSize  模版表格行数 取第一个行数相等列数相等的表格填充* @param isDelTmpRow 是否删除模版行*/// TODO 数据行插到模版行下面,没有实现指定位置插入public void insertValueToTable(XWPFDocument doc,List<List<String>> resultList, int tableRowSize, boolean isDelTmpRow)throws Exception {Iterator<XWPFTable> iterator = doc.getTablesIterator();XWPFTable table = null;List<XWPFTableRow> rows = null;List<XWPFTableCell> cells = null;List<XWPFTableCell> tmpCells = null;// 模版列XWPFTableRow tmpRow = null;// 匹配用XWPFTableCell tmpCell = null;// 匹配用boolean flag = false;// 是否找到表格while (iterator.hasNext()) {table = iterator.next();rows = table.getRows();if (rows.size() == tableRowSize) {tmpRow = rows.get(tableRowSize - 1);cells = tmpRow.getTableCells();if (cells.size() == resultList.get(0).size()) {flag = true;break;}}}if (!flag) {return;}tmpCells = tmpRow.getTableCells();for (int i = 0, len = resultList.size(); i < len; i++) {XWPFTableRow row = table.createRow();row.setHeight(tmpRow.getHeight());List<String> list = resultList.get(i);cells = row.getTableCells();// 插入的行会填充与表格第一行相同的列数for (int k = 0, klen = cells.size(); k < klen; k++) {tmpCell = tmpCells.get(k);XWPFTableCell cell = cells.get(k);setCellText(tmpCell, cell, list.get(k));}// 继续写剩余的列for (int j = cells.size(), jlen = list.size(); j < jlen; j++) {tmpCell = tmpCells.get(j);XWPFTableCell cell = row.addNewTableCell();setCellText(tmpCell, cell, list.get(j));}}// 删除模版行if (isDelTmpRow) {table.removeRow(tableRowSize - 1);}}public void setCellText(XWPFTableCell tmpCell, XWPFTableCell cell,String text) throws Exception {CTTc cttc2 = tmpCell.getCTTc();CTTcPr ctPr2 = cttc2.getTcPr();CTTc cttc = cell.getCTTc();CTTcPr ctPr = cttc.addNewTcPr();cell.setColor(tmpCell.getColor());cell.setVerticalAlignment(tmpCell.getVerticalAlignment());if (ctPr2.getTcW() != null) {ctPr.addNewTcW().setW(ctPr2.getTcW().getW());}if (ctPr2.getVAlign() != null) {ctPr.addNewVAlign().setVal(ctPr2.getVAlign().getVal());}if (cttc2.getPList().size() > 0) {CTP ctp = cttc2.getPList().get(0);if (ctp.getPPr() != null) {if (ctp.getPPr().getJc() != null) {cttc.getPList().get(0).addNewPPr().addNewJc().setVal(ctp.getPPr().getJc().getVal());}}}if (ctPr2.getTcBorders() != null) {ctPr.setTcBorders(ctPr2.getTcBorders());}XWPFParagraph tmpP = tmpCell.getParagraphs().get(0);XWPFParagraph cellP = cell.getParagraphs().get(0);XWPFRun tmpR = null;if (tmpP.getRuns() != null && tmpP.getRuns().size() > 0) {tmpR = tmpP.getRuns().get(0);}XWPFRun cellR = cellP.createRun();cellR.setText(text);// 复制字体信息if (tmpR != null) {cellR.setBold(tmpR.isBold());cellR.setItalic(tmpR.isItalic());cellR.setStrike(tmpR.isStrike());cellR.setUnderline(tmpR.getUnderline());cellR.setColor(tmpR.getColor());cellR.setTextPosition(tmpR.getTextPosition());if (tmpR.getFontSize() != -1) {cellR.setFontSize(tmpR.getFontSize());}if (tmpR.getFontFamily() != null) {cellR.setFontFamily(tmpR.getFontFamily());}if (tmpR.getCTR() != null) {if (tmpR.getCTR().isSetRPr()) {CTRPr tmpRPr = tmpR.getCTR().getRPr();if (tmpRPr.isSetRFonts()) {CTFonts tmpFonts = tmpRPr.getRFonts();CTRPr cellRPr = cellR.getCTR().isSetRPr() ? cellR.getCTR().getRPr() : cellR.getCTR().addNewRPr();CTFonts cellFonts = cellRPr.isSetRFonts() ? cellRPr.getRFonts() : cellRPr.addNewRFonts();cellFonts.setAscii(tmpFonts.getAscii());cellFonts.setAsciiTheme(tmpFonts.getAsciiTheme());cellFonts.setCs(tmpFonts.getCs());cellFonts.setCstheme(tmpFonts.getCstheme());cellFonts.setEastAsia(tmpFonts.getEastAsia());cellFonts.setEastAsiaTheme(tmpFonts.getEastAsiaTheme());cellFonts.setHAnsi(tmpFonts.getHAnsi());cellFonts.setHAnsiTheme(tmpFonts.getHAnsiTheme());}}}}// 复制段落信息
        cellP.setAlignment(tmpP.getAlignment());cellP.setVerticalAlignment(tmpP.getVerticalAlignment());cellP.setBorderBetween(tmpP.getBorderBetween());cellP.setBorderBottom(tmpP.getBorderBottom());cellP.setBorderLeft(tmpP.getBorderLeft());cellP.setBorderRight(tmpP.getBorderRight());cellP.setBorderTop(tmpP.getBorderTop());cellP.setPageBreak(tmpP.isPageBreak());if (tmpP.getCTP() != null) {if (tmpP.getCTP().getPPr() != null) {CTPPr tmpPPr = tmpP.getCTP().getPPr();CTPPr cellPPr = cellP.getCTP().getPPr() != null ? cellP.getCTP().getPPr() : cellP.getCTP().addNewPPr();// 复制段落间距信息CTSpacing tmpSpacing = tmpPPr.getSpacing();if (tmpSpacing != null) {CTSpacing cellSpacing = cellPPr.getSpacing() != null ? cellPPr.getSpacing(): cellPPr.addNewSpacing();if (tmpSpacing.getAfter() != null) {cellSpacing.setAfter(tmpSpacing.getAfter());}if (tmpSpacing.getAfterAutospacing() != null) {cellSpacing.setAfterAutospacing(tmpSpacing.getAfterAutospacing());}if (tmpSpacing.getAfterLines() != null) {cellSpacing.setAfterLines(tmpSpacing.getAfterLines());}if (tmpSpacing.getBefore() != null) {cellSpacing.setBefore(tmpSpacing.getBefore());}if (tmpSpacing.getBeforeAutospacing() != null) {cellSpacing.setBeforeAutospacing(tmpSpacing.getBeforeAutospacing());}if (tmpSpacing.getBeforeLines() != null) {cellSpacing.setBeforeLines(tmpSpacing.getBeforeLines());}if (tmpSpacing.getLine() != null) {cellSpacing.setLine(tmpSpacing.getLine());}if (tmpSpacing.getLineRule() != null) {cellSpacing.setLineRule(tmpSpacing.getLineRule());}}// 复制段落缩进信息CTInd tmpInd = tmpPPr.getInd();if (tmpInd != null) {CTInd cellInd = cellPPr.getInd() != null ? cellPPr.getInd(): cellPPr.addNewInd();if (tmpInd.getFirstLine() != null) {cellInd.setFirstLine(tmpInd.getFirstLine());}if (tmpInd.getFirstLineChars() != null) {cellInd.setFirstLineChars(tmpInd.getFirstLineChars());}if (tmpInd.getHanging() != null) {cellInd.setHanging(tmpInd.getHanging());}if (tmpInd.getHangingChars() != null) {cellInd.setHangingChars(tmpInd.getHangingChars());}if (tmpInd.getLeft() != null) {cellInd.setLeft(tmpInd.getLeft());}if (tmpInd.getLeftChars() != null) {cellInd.setLeftChars(tmpInd.getLeftChars());}if (tmpInd.getRight() != null) {cellInd.setRight(tmpInd.getRight());}if (tmpInd.getRightChars() != null) {cellInd.setRightChars(tmpInd.getRightChars());}}}}}public void saveDocument(XWPFDocument document, String savePath)throws Exception {FileOutputStream fos = new FileOutputStream(savePath);document.write(fos);fos.close();}// 生成测试数据public List<List<String>> generateTestData(int num) {List<List<String>> resultList = new ArrayList<List<String>>();for (int i = 1; i <= num; i++) {List<String> list = new ArrayList<String>();list.add("" + i);list.add("测试_" + i);list.add("测试2_" + i);list.add("测试3_" + i);list.add("测试4_" + i);resultList.add(list);}return resultList;}
}

结果如下:
      普通表格不删除模版列:
      

 
      普通表格删除模版列:
      

 
      带样式表格不删除模版列:
      

 
      带样式表格删除模版列:
       

 
      带合并单元格表格不删除模版列:
      

 
      带合并单元格表格删除模版列:
      

原链接:http://53873039oycg.iteye.com/blog/2152759

转载于:https://www.cnblogs.com/dreammyle/p/4606867.html

[简单]poi word2007表格按模版样式填充行数据相关推荐

  1. 怎么一次性将Excel表格中指定文本整行数据删除

    今天跟跟大家分享一下怎么一次性将Excel表格中指定文本整行数据删除 1.如下图我们想要快速将汇总行数据整行删除掉 2.首先我们点击表格任意一单元格,同时按下Ctrl+A全选表格区域 3.然后点击下图 ...

  2. 若依的框架怎么样_基于bootstrapTable的若依框架如何获取表格选中行的整行数据?...

    导语 项目是基于若依框架写的,大部分的底层技术都是bootstrap. 最近在写一个项目的时候遇见一个需求,需要将子页面表格中选中的数据回传给父页面.为了减少网络请求,所以就准备直接使用子父页面传值. ...

  3. vue导出excel表格并支持样式、行高修改xlsxxlsx-style

    前言 使用插件xlsx.xlsx-style导出带有样式的表格,两者都可以实现创建excel,但是xlsx免费版仅仅只能做单元格合并,收费版才能设置单元格样式,所以需要用到xlsx-style插件实现 ...

  4. 用pageOffice插件实现 word文档在线填充指定数据

    pageOffice控件实现 office word文档在线填充指定数据 应用场景 OA办公中,经常要在文档的指定位置,填充后端指定数据. 如合同中, 姓名位置,金额位置,住址位置,要填充后端指定数据 ...

  5. luckySheet+POI+EasyExcel实现在线excel模版的导出和数据填充

    luckySheet+POI+EasyExcel实现在线excel模版的导出和数据填充 业务需求 关键字 luckySheet POI EasyExcel 代码实现 前端luckySheet配置的ex ...

  6. Java poi 操作word替换模版中固定参数(页眉、段落、表格)

    近期碰到一个稍微头疼的需求,将word模版中的参数替换为实际值,其中包括段落.列表(行数不够时自动递增).页眉:本文以docx文档为例,其中代码有其他地方参考,如有冒犯,还请海涵: 模版: 实现效果: ...

  7. apache poi word表格样式(表格固定间隔,表格字体颜色)、段落样式(段落字体颜色,格式)

    Apache POI [1] 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能.POI为&qu ...

  8. 使用poi给word文档表格中添加样式

    32.使用poi给word文档表格中添加样式 File fileNew = new File(exportPath + exportName + ".docx");InputStr ...

  9. html表格填充随页面大小自动缩放,一个简单的html表格自适应解决方案

    1.他们有一些在实际中是难以实现的,尤其是那些依靠::before伪元素来生成表头的. 2.他们之中有一些不适合所有类型中的表数据,例如pie chart. 3.他们之中有一些可能被用户所拒绝.例如消 ...

最新文章

  1. ORACLE限制IP访问数据库
  2. 温州大学《机器学习》课程课件(二)(回归)
  3. python可以写安卓应用吗_python可以编写android程序吗?
  4. 完整的连接器设计手册_减速齿轮箱的设计 用一整套完整流程来说明(附PDF手册)...
  5. 进程是如何使用内存的?
  6. 学习Java之前先学C语言
  7. HTML fieldset控件
  8. 计算机图形学E9——裁剪——固定矩形窗口裁剪多边形(凸多边形/凹多边形)
  9. BlockingQueue使用详解以及测试代码
  10. codeforces 679B
  11. 超级计算机燕 排名,特斯拉超级计算机算力全球第五,展现无人驾驶领域野心...
  12. 2022年上半年软件设计师上午真题及答案解析
  13. 电子工程师私藏的一个网站
  14. AIRS Opencat机器猫
  15. 秀米编辑器内容复制到wangEditor中图片的处理
  16. vps和云主机哪个好
  17. 决手动打开凭据管理器报0x80070005错误的问题-CMD方式
  18. 情人节情侣表空间白网页源码 html 简单易改 祝福你们幸福安康、地久天长!
  19. 哪些iPhone具有纵向模式?
  20. 四、最小生成树——普里姆(Prim)算法

热门文章

  1. 在dos下用csc命令编译,提示“csc不是内部或外部命令,也不是可运行的程序... ”
  2. Centos7安装docker与docker-compose
  3. 面试题之在字符串中查找出第一个只出现一次的字符的位置
  4. NOIP2017大爆炸
  5. Oracle导出表(即DMP文件)的两种方法
  6. linux 创建连接命令 ln -s 软连接
  7. 夺命雷公狗---javascript NO:03 流程结构
  8. 14年12月CCF真题4-最优灌溉
  9. tf.truncated_normal和tf.random_normal使用方法的区别
  10. linux运行jar文件