poi导出Excel之模板导出
模板导出
实现流程1.自定义excel模板,放到Springboot的resource路径下,程序按照excel的路径将Excel读取成workbook流,
2.给单元格赋值,我们知道模板长什么样子,从第几行开始遍历赋值数据,或者指定某个单元格赋值数据都可以通过x,y轴的坐标来定位。
3.赋值完成后,我们将带有数据的workbook保存到本地;
4.输出到浏览器下载,或者只留在本地文件留着给Email做附件都可以,看自己的业务需求
封装的工具类
import org.apache.poi.ss.usermodel.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Component;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.Map;
/*
* poi 将数据导入指定模板
* Qauthor T011921
* */
@Component
public class ExcelDataWriteTemplate {static final Logger logger = LoggerFactory.getLogger(ExcelDataWriteTemplate.class);private Workbook workbook;private Sheet sheet;private Cell cell;private Row row;private CellStyle cellStyle;/**** @param filePath 模板的路径@return*/public void createWorkbook(Stping filePath) {try{ClassPathResource classPathResource = new CLassPathResource(filePath);workbook = WorkbookFactory.create(classPathResource.getInputStream());cellStyle = workbook.createCellStyle();cellStyle.setAlignment(HorizontalAlignment.CENTER);cellStyle.setBorderBottom(BorderStyle.THIN);cellStyle.setBorderLeft(BorderStyLe.THIN);cellStyLe.setBorderRight(BorderStyLe.THIN);cellStyle.setBorderTop(BorderStyle.THIN);}catch(Exception e){Logger.error("createWorkbook-->",filePath)e.printStackTrace();}}/**@param SheetName 提供sheet页的名称,操作该sheet页*/public void setCustomSheet(String SheetName){ try{sheet = workbook.getSheet(SheetName);}catch (Exception e){logger.error("setcustomSheet-->", SheetName);e.printstackTrace();}}/*根据excel坐标,向指定坐标位置赋值* @param x ,从0开始* @param y从0开始* @param value 存入的值*/public void setCellValue(int x,int y, String value){try{row = sheet.getRow(y);if(row == null){row = sheet.createRow(y);}cell = row.getCell(x);if(cell == null){cell = row.createCell(x);}cell.setCellValue(value);}catch (Exception e){logger.error("setCellValue-->""{x:" + x + ",y:" + y + ",value:" + value + "}");e.printStackTrace();}}/**根据excel坐标,从指定行循环依次遍历数据* @param y告诉程序从exceL的第几行开始插入数据;从0开始* @param x告诉程序从第几列开始依次插入数据,从0开始* @param fieldName 与数据集合的key字段对应,该数组的顺序需要与ExceL模板的列顺序对应* @param dataList 数据集合* */public void setCelLValue( int x, int y, List<Map<String, Object>> dataList, String[] fieldName){int cache_X =x;for (int i=0; i<dataList.size();i++){row = sheet.getRow(y);if(row == null){row = sheet.createRow(y);}y++;for(int j =0; j<fieldName.length;j++){cell = row.getCell(x);if(cell == null){cell = row.createCell(x);cell.setCellStyle(cellStyle);}if (dataList.get(i).containsKey(fieldName[j].toString())) {cell.setCellValue(dataList.get(i).get(fieldName[j]).toString());}x++;}x = cache_X;}}/***将workbook文件流输出到本地*/public void write(String tempFile) {FileOutputStream fos = nulL;try{fos = new FileOutputStream(tempFile);workbook.write(fos);} catch (FileNotFoundException e) {e.printStackTrace();}catch (IOException e) {e.printStackTrace()} finally {if(fos != null) {try{fos.close();} catch (IOException e) {e.printStackTrace();}} if (workbook!=null) {try {workbook.close();} catch (IOException e) {e.printStackTrace();}}}}
}
调用上面工具类
public String writeExcelFile(List<Map<String, Object>> list1, List<Map<String, Object>> List2, String tempPath, boolean flag){ ExcelDataWriteTemplate workbook = new ExcelDataWriteTemplate();workbook.createWorkbook(tempPath);if(flag){workbook.setCustomSheet("sheet0");workbook.setCellValue(2, 1, "填报机构:xxx");workbook.setCellValue(5, 1, "联系电话:xxx");workbook.setcellValue(0, 3,list1,EmailConstant.fieldNames);//写入到临时文件String filePath= SystemProperties.DOWLOAD_PATH + File.separator + System.currentTimeMillis() +".xLs";workbook.write(filePath);return filePath;
}
poi导出Excel之模板导出相关推荐
- POI之excel固定模板导出
POI之excel固定模板导出 一.简介 二.excel模板 三.项目中maven依赖 四.Excel模板操作代码 五.Controller层excel模板导出接口代码 六.导出excel 一.简介 ...
- JXLS导出Excel(模板导出)
1.导包 在pom.xml中加入依赖如下: <dependency><groupId>org.jxls</groupId><artifactId>jxl ...
- 蓄力-利用POI进行excel的导入导出(包含图片)
这里写自定义目录标题 利用POI进行excel的导入导出 引入的jar包 excel导入 主方法: 将excel里面的图片转成数据 xls格式 xlsx格式 将图片数据转成字节流的方式传输到FTP服务 ...
- 手摸手教学-利用原生POI对excel的导入导出以及阿里的easyexcel的基本操作
文章目录 原生POI对excel的导入导出以及阿里的easyexcel的基本操作 首先是最原始的POI操作excel 其次是POI操作excel对数据库的导入导出 最后是阿里的easyexcel的简单 ...
- Excel按照模板导出并下载
Excel按照模板导出并下载 仅记录方法,如果使用中遇到问题,并不负责 一般来讲,导出关系型数据库的Excel,可以直接按照数据库中的格式导出,非常简单,之后会贴上简单格式导出的代码. 如果涉及到按照 ...
- 使用 poi 通过浏览器方式导出Excel表格(导出字段与表格字段不一样且取值逻辑改变)
使用 poi 通过浏览器方式导出Excel表格(导出字段与表格字段不一样且取值逻辑改变) 思路:拿到表格页面查询的结果作为查询条件,表格页面的url和点击导出按钮的url是一样的,按钮的url多一个参 ...
- java 导出excel xssf_XSSFWorkbook实现导出excel
1.pom.xml中加入poi依赖: org.apache.poi poi 3.10-FINAL org.apache.poi poi-ooxml 3.10-FINAL org.apache.poi ...
- vue+elementui表格前端导出excel以及自定义导出样式
vue+elementui表格前端导出excel以及自定义导出样式 项目遇到前端自己导出表格,我自己把后端给我的数据处理了一波,合并重复列啊,以及表头合并啊.可没想到导出竟然也要前端自己来弄,于是乎请 ...
- JAVA POI通用Excel导入模板
JAVA POI通用Excel导入模板 Excel导入模板类 Excel导入模板类 package com.golte.dataform.analysis.controller;import com. ...
最新文章
- Android 替换TextView 里面指定的符号
- Android 常见工具类封装
- Mock session,cookie,querystring in ASB.NET MVC
- @PreAuthorize 权限控制的原理
- Java大神推荐,java编程基础必备(必看)
- 这台无人机40小时经历上万次事故,终于借助AI学会了自动飞行
- vue 实例化几种方式_Vue双向数据绑定
- swag您的装置不支持_一件充满意境的中国风水墨粒子、电子屏风交互装置
- 如何打印出给定尺寸的方格_打印给定号码的表格| 8086微处理器
- CVPR 2019 | Adobe提出新型超分辨率方法:用神经网络迁移参照图像纹理
- 跑分cpu_英特尔Rocket Lake 8核心和16线程CPU跑分泄漏
- 限定位宽比较大小_自己之前买电脑整理的一些电脑知识,比较粗糙,仅供参考。...
- sd卡测速工具_怎样恢复SD卡数据?教你两招轻松恢复
- catia飞机建模+flightgear飞行仿真
- 心电信号越界怎么回事_心电信号基础
- SSD目标检测算法生成8732个先验框
- 最近发现的一个c# winform的一个很好用很强大的excel控件 reogrid控件
- RS编译码理论介绍与MATLAB性能仿真
- warning: ISO C forbids an empty translation unit [-pedantic]
- java微信小程序的校园外卖点餐平台 uniapp