Java使用excel工具类导出对象功能示例

作者:LovooGod 时间:2022-07-04 23:06:50 

本文实例讲述了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

标签:Java,excel,工具类
0
投稿

猜你喜欢

  • Java实现矩阵加减乘除及转制等运算功能示例

    2023-07-05 04:49:53
  • Mybatis 动态SQL的几种实现方法

    2023-11-10 12:15:15
  • JVM类加载,垃圾回收

    2022-08-16 02:44:36
  • 详解Java Spring AOP

    2023-09-06 15:40:02
  • 详解spring boot使用@Retryable来进行重处理

    2021-07-11 18:34:11
  • java接口返回参数按照请求参数进行排序方式

    2023-02-19 07:30:05
  • C#去除字符串中的反斜杠实例(推荐)

    2022-02-02 20:27:14
  • WPF自定义路由事件的实例教程

    2022-04-17 13:33:07
  • Java double转BigDecimal的注意事项说明

    2022-12-13 14:44:38
  • IntelliJ IDEA像Eclipse一样打开多个项目的图文教程

    2022-03-14 05:31:40
  • 详解Java 信号量Semaphore

    2021-12-22 11:10:36
  • java控制台输出图书馆管理系统

    2022-06-13 01:29:29
  • 浅谈java 增强型的for循环 for each

    2023-03-30 18:51:05
  • Android使用ItemTouchHelper实现侧滑删除和拖拽

    2021-12-18 20:00:40
  • Silverlight将图片转换为byte的实现代码

    2022-03-07 11:07:15
  • Android 屏幕双击事件的捕获简单示例

    2022-08-30 11:02:55
  • Java如何在PDF中添加ToolTip工具提示

    2021-12-31 12:12:53
  • Java程序员必须知道的5个JVM命令行标志

    2023-11-11 15:30:36
  • Java中File类方法详解以及实践

    2021-09-13 05:58:16
  • java Disruptor构建高性能内存队列使用详解

    2022-02-03 00:41:14
  • asp之家 软件编程 m.aspxhome.com