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

argsClass[i] = args[i].getClass();

}

Method method = ownerClass.getMethod(methodName, argsClass);

return method.invoke(owner, args);

}

/**

* 向导出文件写数据

*

* @param datalist 存放字符串数组

* @return

*/

public void writeDatasByStr(List 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程序设计有所帮助。

java获取excle表格对象_Java使用excel工具类导出对象功能示例相关推荐

  1. java获取excle表格对象_Java读取excel表格

    Java读取excel表格 一般都是用poi技术去读取excel表格的,但是这个技术又是什么呢 什么是Apache POI? Apache POI是一种流行的API,它允许程序员使用Java程序创建, ...

  2. java 由接口构造对象_Java学习笔记04——类和对象|抽象和接口|构造方法与继承...

    六.Java类 1.  Java中用关键字class来创建类. 2.  类中属性和方法称为类的成员;类的声明和方法要在同一个文件内,不同于C++. 3.  类的定义: [] class [extend ...

  3. java每秒限流_java限流工具类

    代码 import com.google.common.util.concurrent.RateLimiter; import java.util.concurrent.ConcurrentHashM ...

  4. java正则 找出数字_Java使用正则表达式实现找出数字功能示例

    本文实例讲述了Java使用正则表达式实现找出数字功能.分享给大家供大家参考,具体如下: 1.问题: String str = "fjd789klsd908434jk#$$%%^3848854 ...

  5. java获取指定倒退或向前的时间工具类

    最近,业务中碰见需要获取指定的时间,比如向前倒推一定的时间,向后倒推一定的时间,此次记载一下处理的相关代码逻辑, //获取当前时间向后推一天public static String getDayAft ...

  6. java unicode转韩文_Java 使用hutool工具类代替commons-text进行Json 中文 Unicode转换

    可选的工具 中文转换Unicode,目前有两种方式,自写工具类或引入第三方包,这里我推荐引入三方包,因为使用mvn配置非常简单,网上搜到的大多数都是自己写的工具类,试了一个,效果不是很好,因为把ASC ...

  7. java 导入excel工具类_java Excel工具类,导入导出Excel数据

    java Excel工具类,导入导出Excel数据,导入数据对合并表格有判断获取数据: 导出数据到Excel,Excel文件不存在会创建. 使用的是poi处理,兼容Excel. 对反射不够理解,目前先 ...

  8. 操作Excel工具类:ExcelUtils.java

    项目中,时常会需要导入导出Excel的需求,因此我专门花时间设计了工具类. 所需依赖 <!-- 处理xls或xlsx格式的Excel表格导入导出的依赖 --><dependency& ...

  9. Java解析Excel工具类(兼容xls和xlsx)

    依赖jar <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml< ...

最新文章

  1. php iis6 安装ssl证书,在IIS下部署SSL证书实现HTTPS
  2. XML 学习 (3)
  3. 文件名利用RLO技术欺骗(学习)
  4. CAN总线技术 | 物理层04 - 终端电阻与双绞线(特性阻抗120欧)
  5. 力扣 剑指 Offer 10- I. 斐波那契数列
  6. 联想,寻找下一个时代的联想
  7. ASP.NET连接数据库实现登录和注册
  8. shell字符串的截取的问题
  9. oracle 表空间达到32g,oracle表空间到32G后扩容
  10. 联想计算机wifi卸载,怎么卸载联想笔记本电源管理软件
  11. “罪魁祸首”已找到,微软回应修改 MIT 开源项目作者版权声明
  12. 2022年全球市场羊毛纱总体规模、主要生产商、主要地区、产品和应用细分研究报告
  13. 高阶篇:4.1.1)QFDI(客户需求转换为设计要求)
  14. C#调用天气预报接口
  15. 实现国标GB/T28181流媒体服务解决方案安防4G摄像头互联网直播方案EasyGBS之水库管理无线视频监控解决方案
  16. 回忆2018年高教杯数学建模大赛
  17. QT4.6.3在TQ2440上的移植
  18. 《4DenoiseNet: Adverse Weather Denoising from Adjacent Point Clouds》
  19. 终端改变字体颜色和背景,控制光标,设置屏幕,更改样式与ANSI Esc(\033,\x1B,\e)转义序列用法
  20. phantomjs html2Image.js 网页转换图片

热门文章

  1. git安装【Windows】
  2. HBase性能优化方法总结(三):读表操作
  3. 数据库不推荐使用外键的9个理由
  4. Java批量生成数据库测试数据
  5. 【Java数据库】SQL时间类型Date Time Timestamp区别、插入/取出指定时间段的数据
  6. 汇编语言 计算ffff:0006单元中的数乘以3,结果存在dx中
  7. netty系列之:netty中的Channel详解
  8. 一张PDF了解JDK10 GC调优秘籍-附PDF下载
  9. Java虚拟机内存分配策略
  10. JMM和底层实现原理