Java 对象集合数据导出到Excel
来源:互联网 发布:火车票网络订票时间 编辑:程序博客网 时间:2024/06/05 22:45
导出类
package test;import java.io.FileOutputStream;import java.io.OutputStream;import java.lang.reflect.Method;import java.text.SimpleDateFormat;import java.util.Date;import java.util.List;import java.util.Map;import java.util.UUID;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.util.CellRangeAddress;/*** * 导出List<Object>数据到excel(最多可导出65535行) * @author user */public final class ExportExcel { /*** * 构造方法 */ private ExportExcel() { } /*** * 工作簿 */ private static HSSFWorkbook workbook; /*** * sheet */ private static HSSFSheet sheet; /*** * 标题行开始位置 */ private static final int TITLE_START_POSITION = 0; /*** * 时间行开始位置 */ private static final int DATEHEAD_START_POSITION = 1; /*** * 表头行开始位置 */ private static final int HEAD_START_POSITION = 2; /*** * 文本行开始位置 */ private static final int CONTENT_START_POSITION = 3; /** * * @param dataList * 对象集合 * @param titleMap * 表头信息(对象属性名称->要显示的标题值)[按顺序添加] * @param sheetName * sheet名称和表头值 */ public static void excelExport(List<?> dataList, Map<String, String> titleMap, String sheetName) { // 初始化workbook initHSSFWorkbook(sheetName); // 标题行 createTitleRow(titleMap, sheetName); // 时间行 createDateHeadRow(titleMap); // 表头行 createHeadRow(titleMap); // 文本行 createContentRow(dataList, titleMap); //设置自动伸缩 //autoSizeColumn(titleMap.size()); // 写入处理结果 try { //生成UUID文件名称 UUID uuid = UUID.randomUUID(); String filedisplay = uuid + ".xls"; //如果web项目,1、设置下载框的弹出(设置response相关参数);2、通过httpservletresponse.getOutputStream()获取 OutputStream out = new FileOutputStream("D:\\" + filedisplay); workbook.write(out); out.close(); } catch (Exception e) { e.printStackTrace(); } } /*** * * @param sheetName * sheetName */ private static void initHSSFWorkbook(String sheetName) { workbook = new HSSFWorkbook(); sheet = workbook.createSheet(sheetName); } /** * 生成标题(第零行创建) * @param titleMap 对象属性名称->表头显示名称 * @param sheetName sheet名称 */ private static void createTitleRow(Map<String, String> titleMap, String sheetName) { CellRangeAddress titleRange = new CellRangeAddress(0, 0, 0, titleMap.size() - 1); sheet.addMergedRegion(titleRange); HSSFRow titleRow = sheet.createRow(TITLE_START_POSITION); HSSFCell titleCell = titleRow.createCell(0); titleCell.setCellValue(sheetName); } /** * 创建时间行(第一行创建) * @param titleMap 对象属性名称->表头显示名称 */ private static void createDateHeadRow(Map<String, String> titleMap) { CellRangeAddress dateRange = new CellRangeAddress(1, 1, 0, titleMap.size() - 1); sheet.addMergedRegion(dateRange); HSSFRow dateRow = sheet.createRow(DATEHEAD_START_POSITION); HSSFCell dateCell = dateRow.createCell(0); dateCell.setCellValue(new SimpleDateFormat("yyyy年MM月dd日").format(new Date())); } /** * 创建表头行(第二行创建) * @param titleMap 对象属性名称->表头显示名称 */ private static void createHeadRow(Map<String, String> titleMap) { // 第1行创建 HSSFRow headRow = sheet.createRow(HEAD_START_POSITION); int i = 0; for (String entry : titleMap.keySet()) { HSSFCell headCell = headRow.createCell(i); headCell.setCellValue(titleMap.get(entry)); i++; } } /** * * @param dataList 对象数据集合 * @param titleMap 表头信息 */ private static void createContentRow(List<?> dataList, Map<String, String> titleMap) { try { int i=0; for (Object obj : dataList) { HSSFRow textRow = sheet.createRow(CONTENT_START_POSITION + i); int j = 0; for (String entry : titleMap.keySet()) { String method = "get" + entry.substring(0, 1).toUpperCase() + entry.substring(1); Method m = obj.getClass().getMethod(method, null); String value = m.invoke(obj, null).toString(); HSSFCell textcell = textRow.createCell(j); textcell.setCellValue(value); j++; } i++; } } catch (Exception e) { e.printStackTrace(); } } /** * 自动伸缩列(如非必要,请勿打开此方法,耗内存) * @param size 列数 */ private static void autoSizeColumn(Integer size) { for (int j = 0; j < size; j++) { sheet.autoSizeColumn(j); } }}
测试代码
package test;import java.util.ArrayList;import java.util.HashMap;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;public class CustomerExportTest { /** * @param args */ public static void main(String[] args) { /**模拟数据开始*/ List<Employee> staffs = new ArrayList<Employee>(); for (int i = 0; i < 65532; i++) { Employee staff = new Employee(i, i+"group", 1900+i, 12, 25, 2500+i); staffs.add(staff); } Map<String,String> titleMap = new LinkedHashMap<String,String>(); titleMap.put("name", "姓名"); titleMap.put("clazz", "组号"); titleMap.put("year", "年份"); titleMap.put("month", "月份"); titleMap.put("day", "天"); titleMap.put("salary", "薪资"); String sheetName = "信息导出"; /**模拟数据结束*/ System.out.println("start导出"); long start = System.currentTimeMillis(); ExportExcel.excelExport(staffs, titleMap, sheetName); long end = System.currentTimeMillis(); System.out.println("end导出"); System.out.println("耗时:"+(end-start)+"ms"); }}
Employee类
package test;public class Employee { private Integer name; private String clazz; private Integer year; private Integer month; private Integer day; private double salary; public Employee() { }; public Employee(Integer name, String clazz, Integer year, Integer month, Integer day, double salary) { super(); this.name = name; this.clazz = clazz; this.year = year; this.month = month; this.day = day; this.salary = salary; } /** * @return name */ public Integer getName() { return name; } /** * @return year */ public Integer getYear() { return year; } /** * @return month */ public Integer getMonth() { return month; } /** * @return day */ public Integer getDay() { return day; } /** * @return salary */ public double getSalary() { return salary; } /** * @param name * set name */ public void setName(Integer name) { this.name = name; } /** * @param year * set year */ public void setYear(Integer year) { this.year = year; } /** * @param month * set month */ public void setMonth(Integer month) { this.month = month; } /** * @param day * set day */ public void setDay(Integer day) { this.day = day; } /** * @param salary * set salary */ public void setSalary(double salary) { this.salary = salary; } /** * @return clazz */ public String getClazz() { return clazz; } /** * @param clazz * set clazz */ public void setClazz(String clazz) { this.clazz = clazz; } @Override public String toString() { return "Employee [name=" + name + ", clazz=" + clazz + ", year=" + year + ", month=" + month + ", day=" + day + ", salary=" + salary + "]"; }}
效果如下(6万条数据用时5s):
针对对象之间的组合关系,导出不适用,
例如Employee extends User,User Extends Person,此时如果需要导出person.user.employee.name,则不能用此导出,如需要可私信。
1 0
- Java 对象集合数据导出到Excel
- JAVA 导出数据到excel
- Java数据导出到excel
- java 导出数据到Excel
- Java 导出数据到excel
- java导出数据到excel
- java导出数据到Excel
- Java导出数据到Excel
- Java 导出数据到Excel
- java 导出数据到excel 之 WritableWorkbook
- Java数据导出到excel和word
- java——导出数据到Excel
- java中jxl导出数据到excel
- java poi导出list数据到excel
- java 导出数据到excel 之 WritableWorkbook
- java利用poi导出数据到excel
- 学习记录--Java数据导出到excel
- Java将数据导出到Excel
- 贪吃蛇小游戏(JAVA)
- UI_触摸事件
- nyoj--18--The Triangle(dp水题)
- opencv 漫水填充运用
- Lowest Common Ancestor in a Binary Tree
- Java 对象集合数据导出到Excel
- 南京学思XSuperNest使用addHeaderView注意事项
- matlab读取视频VideoReader类 mmreader
- hadoop伪分布式安装步骤
- LeetCode:Factorial Trailing Zeroes
- Leetcode 第6题 ZIGZAG后,行列输出
- 11. Spring MVC4.1-全局异常处理
- 在VMware虚拟机中安装CentOS 7
- 南京学思XSuperNEST中ListView优化