Java使用excel工具类导出对象功能示例
作者:LovooGod 发布时间:2022-07-04 23:06:50
标签:Java,excel,工具类
本文实例讲述了Java使用excel工具类导出对象功能。分享给大家供大家参考,具体如下:
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<String> fieldNames;
/**
* 11、导出文件每列代码,用于反射获取对象属性值
*/
private List<String> fieldCodes;
//---构造方法-----------------------------------------
public ExcelExportUtil() {
}
public ExcelExportUtil(SXSSFWorkbook workbook) {
this.workbook = workbook;
}
public static ExcelExportUtil start(String filePath, String fileWebPath, String filePrefix, List<String> fieldNames, List<String> 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 <j ; i++) {
argsClass[i] = args[i].getClass();
}
Method method = ownerClass.getMethod(methodName, argsClass);
return method.invoke(owner, args);
}
/**
* 向导出文件写数据
*
* @param datalist 存放字符串数组
* @return
*/
public void writeDatasByStr(List<String> 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<String> fieldNames = new ArrayList<String>();
//获取导出字段代码
List<String> fieldCodes = new ArrayList<String>();
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<String> getFieldNames() {
return fieldNames;
}
public void setFieldNames(List<String> fieldNames) {
this.fieldNames = fieldNames;
}
public List<String> getFieldCodes() {
return fieldCodes;
}
public void setFieldCodes(List<String> fieldCodes) {
this.fieldCodes = fieldCodes;
}
}
希望本文所述对大家java程序设计有所帮助。
来源:http://blog.csdn.net/lovoo/article/details/77899306


猜你喜欢
- RocketMQ 是什么Github 上关于 RocketMQ 的介绍:RcoketMQ 是一款低延迟、高可靠、可伸缩、易于使用的消息中间件
- 当一个产品或者项目由大量独立模块组成时,想要从 Git 挨个下载下来导入 IDE 查看并不容易,此时可以结合使用 Git 和 Maven 的
- CamShift算法全称是“Continuously Adaptive Mean-Shift”(连续的自适应MeanShift算法),是对M
- 加密配置文件的SQL账号密码一般项目的配置文件里的信息都是明文的,导致有时候比较敏感的信息也直接暴露得超级明显,比如SQL的链接 账号 密码
- 在图文混排的文档中,我们可以根据需要将文档中的文字信息或者图片提取出来,通过C#代码可以提取Word和PDF文件中的文本和图片,那么同样的,
- 无障碍服务可以模拟一些用户操作,无障碍可以处理的对象,通过类 AccessibilityNodeInfo 表示,通过无障碍服务,可以通过它的
- 本文实例为大家分享了Android弹出菜单效果的具体代码,供大家参考,具体内容如下功能描述:用户单击按钮弹出菜单。当用户选择一个菜单项,会触
- 【前言】Mybatis 除了 XML 配置写法,还可以使用注解写法。首先需要引入 Mybatis 的依赖:<dependency>
- 一、概述无论是什么语言,在多线程编程中,常常会遇到多个线同时操作程某个变量(读/写),如果读/写不同步,则会造成不符合预期的结果。例如:线程
- Java通过证书访问Https请求创建证书管理器类import java.io.FileInputStream;import java.se
- 1.服务配置中心1.1 服务配置中心介绍首先我们来看一下,微服务架构下关于配置文件的一些问题:1.配置文件相对分散。在一个微服务架构下,配置
- 装箱和拆箱是值类型和引用类型之间相互转换是要执行的操作。 1. 装箱在值类型向引用类型转换时发生2. 拆箱在引用类型向值
- 有经验的开发人员都知道在开发.NET应用时可以利用配置文件保存一些常用并且有可能变化的信息,例如日志文件的保存路径、数据库连接信息等等,这样
- 本文同时讨论了IComparable和IComparer接口,原因有两点。这两个接口经常一起使用。虽然接口类似且名称相似,但它们却有不同的用
- 在android 中可以广泛看到的template<typename T> class Sp 句柄类实际上是android 为实
- 其实大家都知道多线程传值有三种方式:1:通过构造方法传递数据2:通过变量和方法传递数据3:通过回调函数传递数据那么博主有个非常变态的需求,所
- 简述在学着使用Java的命令行来编译java文件的时候,遇到了这个问题Windows操作系统报错“‘
- 线程安全解决方案synchronized,ReentrantLock,Atomic 使用场景描述在实际开发过程中如果服务量,请求频繁,就会经
- MyBatis Plus插件MyBatis Plus提供了分页插件PaginationInterceptor、执行分析插件SqlExplai
- 思路:先获得当前季度的开始和结束日期,在当前日期的基础上往前推3个月即上个季度的开始和结束日期/** * @param fla