JAVA工具类(3) ---使用excel工具类导出对象
发布日期:2021-06-30 22:40:57 浏览次数:2 分类:技术文章

本文共 7218 字,大约阅读时间需要 24 分钟。

package com.gcloud.common;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.xssf.streaming.SXSSFSheet;import org.apache.poi.xssf.streaming.SXSSFWorkbook;import java.io.FileOutputStream;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.List;/** * Created by charlin on 2017/9/7. */public class ExcelExportUtil {
// 1、定义工作表 private SXSSFWorkbook workbook; // 2、定义sheet private Sheet sheet; // 3、定义保存在内存中的数量,-1表示手动控制 private int flushRows; /** * 4、导出文件行数 */ private int rowNum; /** * 5、导出文件列数 */ private int colNum; /** * 6、导出文件的存放路径 */ private String filePath; /** * 7、下载导出文件的路径 */ private String fileWebPath; /** * 8、文件名称前缀 */ private String filePrefix; /** * 9、导出文件全路径 */ private String fileAllPath; /** * 10、导出文件列标题 */ private List
fieldNames; /** * 11、导出文件每列代码,用于反射获取对象属性值 */ private List
fieldCodes; //---构造方法----------------------------------------- public ExcelExportUtil() { } public ExcelExportUtil(SXSSFWorkbook workbook) { this.workbook = workbook; } public static ExcelExportUtil start(String filePath, String fileWebPath, String filePrefix, List
fieldNames, List
fieldCodes, int flushRows) throws Exception { ExcelExportUtil excelExportUtil = new ExcelExportUtil(); excelExportUtil.setFilePath(filePath); excelExportUtil.setFileWebPath(fileWebPath); excelExportUtil.setFilePrefix(filePrefix); excelExportUtil.setFieldNames(fieldNames); excelExportUtil.setFieldCodes(fieldCodes); //设置输出行数 excelExportUtil.setWorkbook(new SXSSFWorkbook(flushRows)); //设置sheet excelExportUtil.setSheet(excelExportUtil.getWorkbook().createSheet()); excelExportUtil.writeTitles(); return excelExportUtil; } /** * 创建标题 * * @throws Exception */ public void writeTitles() throws Exception { rowNum = 0; colNum = fieldNames.size(); //创建行 Row row = sheet.createRow(rowNum); //在每列第一行输出标题 for (int i = 0; i < colNum; i++) { Cell cell = row.createCell(i); cell.setCellValue(fieldNames.get(i)); } } /** * 写入对象数据 * * @param datalist * @throws Exception */ public void writeDatas(List datalist) throws Exception { for (int i = 0; i < datalist.size(); i++) { rowNum++; //不断创建行 Row row = sheet.createRow(rowNum); for (int j = 0; j < fieldCodes.size(); j++) { Object obj = datalist.get(j); //获得get方法返回的值 Object value = invokeMethod(obj, fieldCodes.get(j), new Object[]{}); Cell cell = row.createCell(j); cell.setCellValue(value != null ? value.toString() : ""); } } } /** * 获得get方法返回的值 * @param owner * @param fieldname * @param args * @return * @throws Exception */ private Object invokeMethod(Object owner, String fieldname, Object[] args) throws Exception { String methodName = "get" + fieldname.substring(0,1).toUpperCase() + fieldname.substring(1); Class ownerClass = owner.getClass(); Class[] argsClass = new Class[args.length]; for (int i = 0, j = argsClass.length ; i
datalist) throws Exception { rowNum++; Row row = sheet.createRow(rowNum); int dataSize = datalist.size(); for (int i = 0; i < colNum; i++) { Cell cell = row.createCell(i); cell.setCellValue(dataSize > i ? datalist.get(i) : ""); } } /** * 手动刷新方法,如果flushRows为-1则需要使用此方法手动刷新内存 * @param flushNum * @throws Exception */ public void flush(int flushNum) throws Exception{ ((SXSSFSheet)sheet).flushRows(flushNum); } /** * 导出文件 * @return * @throws Exception */ public String exportFile() throws Exception{ String fileName = filePrefix + "_" + DateUtil.getCurrentTimeFileName() + ".xlsx"; FileOutputStream fos = new FileOutputStream(filePath + fileName); workbook.write(fos); fos.close(); setFileAllPath(fileWebPath + fileName); return fileWebPath + fileName; } /** * 导出excel通用方法 * @param field * @param path * @param webpath * @param filePrefix * @param datas * @param flushRows * @return * @throws Exception */ public ExcelExportUtil excelExport(String field,String path,String webpath,String filePrefix,List datas,int flushRows) throws Exception{ //导出字段代码和名称 String[] fieldArr = field.split(","); //获取导出字段名称 List
fieldNames = new ArrayList
(); //获取导出字段代码 List
fieldCodes = new ArrayList
(); for (int i = 0; i < fieldArr.length; i++) { String names = fieldArr[i]; String[] nameArr = names.split("#"); fieldNames.add(nameArr[1]); fieldCodes.add(nameArr[0]); } //开导出 ExcelExportUtil exportUtil = ExcelExportUtil.start(path, webpath,filePrefix, fieldNames,fieldCodes, flushRows); //导数据 exportUtil.writeDatas(datas); exportUtil.exportFile(); return exportUtil; } public static void main(String[] args) { //使用方法,调用 //excelExport } //----get set------------------------------------------------- public SXSSFWorkbook getWorkbook() { return workbook; } public void setWorkbook(SXSSFWorkbook workbook) { this.workbook = workbook; } public Sheet getSheet() { return sheet; } public void setSheet(Sheet sheet) { this.sheet = sheet; } public int getFlushRows() { return flushRows; } public void setFlushRows(int flushRows) { this.flushRows = flushRows; } public int getRowNum() { return rowNum; } public void setRowNum(int rowNum) { this.rowNum = rowNum; } public int getColNum() { return colNum; } public void setColNum(int colNum) { this.colNum = colNum; } public String getFilePath() { return filePath; } public void setFilePath(String filePath) { this.filePath = filePath; } public String getFileWebPath() { return fileWebPath; } public void setFileWebPath(String fileWebPath) { this.fileWebPath = fileWebPath; } public String getFilePrefix() { return filePrefix; } public void setFilePrefix(String filePrefix) { this.filePrefix = filePrefix; } public String getFileAllPath() { return fileAllPath; } public void setFileAllPath(String fileAllPath) { this.fileAllPath = fileAllPath; } public List
getFieldNames() { return fieldNames; } public void setFieldNames(List
fieldNames) { this.fieldNames = fieldNames; } public List
getFieldCodes() { return fieldCodes; } public void setFieldCodes(List
fieldCodes) { this.fieldCodes = fieldCodes; }}

———————————————————————

(java 架构师全套教程,共760G, 让你从零到架构师,每月轻松拿3万)
有需求者请进站查看,非诚勿扰

https://item.taobao.com/item.htm?spm=686.1000925.0.0.4a155084hc8wek&id=555888526201

01.高级架构师四十二个阶段高

02.Java高级系统培训架构课程148课时
03.Java高级互联网架构师课程
04.Java互联网架构Netty、Nio、Mina等-视频教程
05.Java高级架构设计2016整理-视频教程
06.架构师基础、高级片
07.Java架构师必修linux运维系列课程
08.Java高级系统培训架构课程116课时
(送:hadoop系列教程,java设计模式与数据结构, Spring Cloud微服务, SpringBoot入门)
——————————————————————–

转载地址:https://lovoo.blog.csdn.net/article/details/77899306 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:JAVA工具类(4) ---文件工具类fileUtil(文件增删改,文件拷贝等)
下一篇:JS工具类大全(1)---产生随机数的几个用法

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月17日 06时26分56秒