easypoi导出动态表头excel
1: springBoot项目maven依赖:
cn.afterturn
easypoi-spring-boot-starter
4.1.2
根据自己的poi版本选择
cn.afterturn
easypoi-spring-boot-starter
3.3.0
测试导出(数据组装如下):
@Testpublic voiddynaCol() {try{
List colList = new ArrayList();
ExcelExportEntity colEntity= new ExcelExportEntity("商品名称", "title");
colEntity.setNeedMerge(true);
colList.add(colEntity);
colEntity= new ExcelExportEntity("供应商", "supplier");
colEntity.setNeedMerge(true);
colList.add(colEntity);
ExcelExportEntity deliColGroup= new ExcelExportEntity("得力", "deli");
List deliColList = new ArrayList();
deliColList.add(new ExcelExportEntity("市场价", "orgPrice"));
deliColList.add(new ExcelExportEntity("专区价", "salePrice"));
deliColGroup.setList(deliColList);
colList.add(deliColGroup);
ExcelExportEntity jdColGroup= new ExcelExportEntity("京东", "jd");
List jdColList = new ArrayList();
jdColList.add(new ExcelExportEntity("市场价", "orgPrice"));
jdColList.add(new ExcelExportEntity("专区价", "salePrice"));
jdColGroup.setList(jdColList);
colList.add(jdColGroup);
List> list = new ArrayList>();for (int i = 0; i < 10; i++) {
Map valMap = new HashMap();
valMap.put("title", "名称." +i);
valMap.put("supplier", "供应商." +i);
List> deliDetailList = new ArrayList>();for (int j = 0; j < 3; j++) {
Map deliValMap = new HashMap();
deliValMap.put("orgPrice", "得力.市场价." +j);
deliValMap.put("salePrice", "得力.专区价." +j);
deliDetailList.add(deliValMap);
}
valMap.put("deli", deliDetailList);
List> jdDetailList = new ArrayList>();for (int j = 0; j < 2; j++) {
Map jdValMap = new HashMap();
jdValMap.put("orgPrice", "京东.市场价." +j);
jdValMap.put("salePrice", "京东.专区价." +j);
jdDetailList.add(jdValMap);
}
valMap.put("jd", jdDetailList);
list.add(valMap);
}
Workbook workbook= ExcelExportUtil.exportExcel(new ExportParams("价格分析表", "数据"), colList,
list);
FileOutputStream fos= new FileOutputStream("D:/价格分析表.tt.xls");
workbook.write(fos);
fos.close();
}catch(FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}
}
导出结果图:
多sheet导出(数据组装)
publicString export(){
Workbook workBook= null;try{
List exportList =exportService.exportList();
System.err.println(JSONArray.toJSONString(exportList));//创建参数对象(用来设定excel得sheet得内容等信息)
ExportParams deptExportParams = newExportParams();//设置sheet得名称
deptExportParams.setSheetName("员工报表1");//创建sheet1使用得map
Map deptExportMap = new HashMap<>();//title的参数为ExportParams类型,目前仅仅在ExportParams中设置了sheetName
deptExportMap.put("title", deptExportParams);//模版导出对应得实体类型
deptExportMap.put("entity", DeptUtil.class);//sheet中要填充得数据
deptExportMap.put("data", exportList);
ExportParams empExportParams= newExportParams();
empExportParams.setSheetName("员工报表2");//创建sheet2使用得map
Map empExportMap = new HashMap<>();
empExportMap.put("title", empExportParams);
empExportMap.put("entity", DeptUtil.class);
empExportMap.put("data", exportList);//将sheet1、sheet2、sheet3使用得map进行包装
List> sheetsList = new ArrayList<>();
sheetsList.add(deptExportMap);
sheetsList.add(empExportMap);//执行方法
workBook =ExcelExportUtil.exportExcel(sheetsList, ExcelType.HSSF);
fileName= URLEncoder.encode("员工报表导出", "UTF-8");
ByteArrayOutputStream outputStream= newByteArrayOutputStream();
workBook.write(outputStream);
outputStream.flush();byte[] byteArray =outputStream.toByteArray();
excelStream= new ByteArrayInputStream(byteArray,0,byteArray.length);
outputStream.close();
}catch(Exception e){
e.printStackTrace();
}finally{if(workBook != null) {try{
workBook.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}return "success";
}
什么场景该用哪个方法?
-导出1.正规excel导出 (格式简单,数据量可以,5W以内吧)
注解方式: ExcelExportUtil.exportExcel(ExportParams entity, Class> pojoClass,Collection>dataSet)2.不定多少列,但是格式依然简单数据库不大
自定义方式: ExcelExportUtil.exportExcel(ExportParams entity, List entityList,Collection>dataSet)3.数据量大超过5W,还在100W以内
注解方式 ExcelExportUtil.exportBigExcel(ExportParams entity, Class>pojoClass,IExcelExportServer server, Object queryParams)
自定义方式: ExcelExportUtil.exportBigExcel(ExportParams entity, ListexcelParams,IExcelExportServer server, Object queryParams)4.样式复杂,数据量尽量别大
模板导出 ExcelExportUtil.exportExcel(TemplateExportParams params, Mapmap)5.一次导出多个风格不一致的sheet
模板导出 ExcelExportUtil.exportExcel(Map>map,TemplateExportParams params)6.一个模板但是要导出非常多份
模板导出 ExcelExportUtil.exportExcelClone(Map>>map,TemplateExportParams params)7.模板无法满足你的自定义,试试html
自己构造html,然后我给你转成excel ExcelXorHtmlUtil.htmlToExcel(String html, ExcelType type)8.数据量过百万级了.放弃excel吧,csv导出
注解方式: CsvExportUtil.exportCsv(CsvExportParams params, Class>pojoClass, OutputStream outputStream)
自定义方式: CsvExportUtil.exportCsv(CsvExportParams params, ListentityList, OutputStream outputStream)9.word导出
模板导出: WordExportUtil.exportWord07(String url, Mapmap)10.PDF导出
模板导出: TODO-导入
如果想提高性能 ImportParams 的concurrentTask 可以帮助并发导入,仅单行,最小1000
excel有单个的那种特殊读取,readSingleCell 参数可以支持1. 不需要检验,数据量不大(5W以内)
注解或者MAP: ExcelImportUtil.importExcel(File file, Class>pojoClass, ImportParams params)2. 需要导入,数据量不大
注解或者MAP: ExcelImportUtil.importExcelMore(InputStream inputstream, Class>pojoClass, ImportParams params)3. 数据量大了,或者你有特别多的导入操作,内存比较少,仅支持单行
SAX方式 ExcelImportUtil.importExcelBySax(InputStream inputstream, Class>pojoClass, ImportParams params, IReadHandler handler)4. 数据量超过EXCEL限制,CSV读取
小数据量: CsvImportUtil.importCsv(InputStream inputstream, Class>pojoClass,CsvImportParams params)
大数据量: CsvImportUtil.importCsv(InputStream inputstream, Class> pojoClass,CsvImportParams params, IReadHandler readHandler)
参考:
使用教程:
http://doc.wupaas.com/docs/easypoi/easypoi-1c0u4mo8p4ro8
链接:https://pan.baidu.com/s/1gBHBI4Lx-roEXrVwvzaBxQ
提取码:dbht
.......