poi实现的excel模板数据填充
解析并填充数据:
在这里插入代码片
package com.dys.app.util;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;/*** Author: dys Date: 2020-03-18 Time: 10:21 Description: 填充Excel模板*/
public class ExcelReader {private static Logger logger = Logger.getLogger(ExcelReader.class.getName());private static final String XLS = ".xls";private static final String XLSX = ".xlsx";/*** 读取excel模板* @param excelFile* @param fos * @param dataList*/public static void readExcel(File excelFile, OutputStream fos, List<ExcelEntity> dataList) {Workbook workbook = null;FileInputStream inputStream = null;try {// 获取Excel文件if (!excelFile.exists()) {logger.debug("指定的Excel文件不存在!");}// 获取Excel工作簿inputStream = new FileInputStream(excelFile);if (excelFile.getName().toLowerCase().endsWith(XLS)) {workbook = new HSSFWorkbook(inputStream);} else if (excelFile.getName().toLowerCase().endsWith(XLSX)) {workbook = new XSSFWorkbook(inputStream);}// 读取excel中的数据parseExcel(workbook, dataList, fos);} catch (Exception e) {logger.debug("解析Excel失败,文件名:" + excelFile.getName() + " 错误信息:" + e.getMessage());e.printStackTrace();} finally {try {if (null != workbook) {workbook.close();}if (null != inputStream) {inputStream.close();}if (null != fos) {fos.close();}if(excelFile.exists()){excelFile.delete();}} catch (Exception e) {logger.debug("关闭数据流出错!错误信息:" + e.getMessage());e.printStackTrace();}}}/*** 填充Excel数据* * @param workbook* @throws IOException */private static void parseExcel(Workbook workbook, List<ExcelEntity> dataList, OutputStream fos) throws IOException {// 解析sheetfor (int sheetNum = 0; sheetNum < workbook.getNumberOfSheets(); sheetNum++) {Sheet sheet = workbook.getSheetAt(sheetNum);// 校验sheet是否合法if (sheet == null) {continue;}// 判断模板是否有表头int firstRowNum = sheet.getFirstRowNum();Row firstRow = sheet.getRow(firstRowNum);if (null == firstRow) {logger.debug("解析Excel失败,在第一行没有读取到任何数据!");}// 获取总列数int rowNum = firstRow.getPhysicalNumberOfCells();for (int n = 0; n < dataList.size(); n++) {for (int r = 0; r < rowNum; r++) {// 获取行Cell cell = getCell(sheet, n+1, (short) r);Object o = getValueFormObject(dataList.get(n), "cell" + (r+1));if(null != o){cell.setCellValue(o.toString());}}}}workbook.write(fos);}//处理表格public static Cell getCell(Sheet sheet, int rowIndex, short columnIndex) {// 获取行,不存在的话则创建Row row = sheet.getRow(rowIndex);if (row == null) {row = sheet.createRow(rowIndex);}// 获取列,不存在的话则创建Cell cell = row.getCell(columnIndex);if (cell == null) {cell = row.createCell(columnIndex);}return cell;}/*** 根据属性,对象的值* * @param ob 对象* @param name 属性名* @return* @throws Exception*/public static Object getValueFormObject(Object ob, String name) {Method[] m = ob.getClass().getMethods();for (int i = 0; i < m.length; i++) {if (("get" + name).toLowerCase().equals(m[i].getName().toLowerCase())) {try {return m[i].invoke(ob);} catch (IllegalAccessException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}}}return null;}
}
excel数据封装实体类:
在这里插入代码片
package com.dys.app.util;import java.io.Serializable;
/*** * 用于excel数据填充时使用* @author dys* **/
public class ExcelEntity implements Serializable{private static final long serialVersionUID = 1L;public Object cell1;public Object cell2;public Object cell3;public Object cell4;public Object cell5;public Object cell6;public Object cell7;public Object cell8;public Object cell9;public Object cell10;public Object getCell1() {return cell1;}public void setCell1(Object cell1) {this.cell1 = cell1;}public Object getCell2() {return cell2;}public void setCell2(Object cell2) {this.cell2 = cell2;}public Object getCell3() {return cell3;}public void setCell3(Object cell3) {this.cell3 = cell3;}public Object getCell4() {return cell4;}public void setCell4(Object cell4) {this.cell4 = cell4;}public Object getCell5() {return cell5;}public void setCell5(Object cell5) {this.cell5 = cell5;}public Object getCell6() {return cell6;}public void setCell6(Object cell6) {this.cell6 = cell6;}public Object getCell7() {return cell7;}public void setCell7(Object cell7) {this.cell7 = cell7;}public Object getCell8() {return cell8;}public void setCell8(Object cell8) {this.cell8 = cell8;}public Object getCell9() {return cell9;}public void setCell9(Object cell9) {this.cell9 = cell9;}public Object getCell10() {return cell10;}public void setCell10(Object cell10) {this.cell10 = cell10;}@Overridepublic String toString() {return "ExcelEntity [cell1=" + cell1 + ", cell2=" + cell2 + ", cell3=" + cell3 + ", cell4=" + cell4 + ", cell5="+ cell5 + ", cell6=" + cell6 + ", cell7=" + cell7 + ", cell8=" + cell8 + ", cell9=" + cell9+ ", cell10=" + cell10 + "]";}
}
poi实现的excel模板数据填充相关推荐
- Excel模板数据填充导出
Excel模板数据填充导出 需求描述: POI实现 1.添加依赖: <dependency><groupId>org.apache.poi</groupId>< ...
- 记录java使用POI实现word模板数据填充
一.前言 最近项目遇到个需求,在模板中填充数据,刚开始是用smartBi报表进行填充,输出参数都是必录,无法满足需求.在网上查了很多资料,有些需要把文档转成xml格式修改里面内容,IDEA里面修改要替 ...
- easyexcel填充excel模板数据,多sheet采用不同方式进行填充
废话不多说,直奔主题,本次是需要在一个包含2个sheet的excel模板中填充数据 easyexcel版本号为 2.2.10 springboot版本号 2.3.8.RELEASE 模板文件需要放在项 ...
- bootstraptable导出excel独立使用_使用 EasyPOI 优雅导出Excel模板数据(含图片)
EasyPOI功能如同名字Easy,主打的功能就是容易,让一个没接触过POI的人员可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出.通过简单的注解和模板语言(熟悉的表 ...
- 使用EasyPOI导出Excel模板数据(含图片)
使用EasyPOI导出Excel模板数据(含图片) EasyPOI功能如同名字Easy,主打的功能就是容易,让一个没接触过POI的人员可以方便的写出Excel导出,Excel模板导出,Excel导入, ...
- Java使用poi加载Excel模板,将查询出来的数据封装到Excel中并进行指定某些列的合并操作
Java使用poi加载Excel模板,将查询出来的数据封装到Excel中并进行指定某些列的合并操作 最近一周项目中需要读取数据库中的记录将记录封装到给定的模板中,指定业务列需要进行合并:下面将它进行整 ...
- java POI下载自定义EXCEL模板
通过POI形成固定excel模板,然后下载 springboot添加依赖 此处引入的是easypoi依赖,也可直接引入apache的POI <!--easyPOI--><depend ...
- 基于阿里巴巴EasyExcel实现对复杂Excel模板的填充
基于阿里巴巴EasyExcel实现对复杂Excel模板的填充 官方文档以及开源 对应修改 代码展示 测试 官方文档以及开源 EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项目 ...
- 使用POI读取EXCEL模板并填充数据,上传至腾讯云储存桶
读取EXCEL模板,并填充数据生成文件 前言 一.POI导入 二.具体实现 1.制作我们的模板 2.读取模板来生成新的EXCEL 3.查看生成结果 三,传到腾讯云储存桶里 1.导入COS依赖 2.写个 ...
最新文章
- linux操作系统上网,linux操作系统下无法上网
- 利用反射机制获取未知类型的枚举的信息
- 第八章 神经网络表示-机器学习老师板书-斯坦福吴恩达教授
- 前端解析Excel文件js-xlsx与bootstrapTable
- C语言enum(枚举)、指针、函数指针
- R中千分位分隔符数值(美式数值)读取
- 35. 搜索插入位置-LeetCode
- 'vue-cli-service' 不是内部或外部命令,也不是可运行的程序 或批处理文件
- Milking Time(POJ-3616)
- React 第七章 条件渲染
- 中科曙光:与VMware合资公司是技术公司
- python函数递归求和详解_Python 递归函数详解及实例
- Django表单提交数据与网页跳转
- 批处理定时执行任务_[Abaqus tips ] 分析任务的定时执行
- 下载VCForPython27.msi
- Java输入输出流体系
- miRbase 数据库简介
- 微信小程序开发工具报错对应的服务器证书无效
- c# 路径下的最近文件夹_C# 添加Word水印(文本水印、图片水印)
- VC版计算器(豪华界面)
热门文章
- 一文足矣——动态规划经典之Floyd(弗洛伊德)算法
- 大模型已涌现社会行为,斯坦福爆火论文打造《西部世界》雏形
- Failed to shutdown database console gracefully
- 将一个二值化的图片中的黑白区域反转(numpy快速完成)
- 命运赋——原文与译文
- 怎样使input失去焦点
- ypora中的图片传入到CSDN中显示错误
- 多个Excel根据两个同指标进行合并查询,处理。
- oracle 杀掉spid,oracle 存储过程 sid spid 如果sid被杀掉了,spid是不也自动停止了?...
- 光脚丫思考Vue3与实战:第05章 计算属性和侦听器 第03节 计算属性的其他玩法