主要使用easypoi中的ExcelExportEntity类对列进行封装,可以设置列的属性。
下面直接贴出自己的代码:(注意data数据类型List中的必须为map,不能为实体类,否则会报错)
pom文件依赖:
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>4.1.0</version>
</dependency>
自己写的工具类:
/**
* @author zhangz
* @desc 简单excel动态选择列导出
* @date 2020/6/16
*/
public class ExcelExportUtils {
private static Logger logger = LoggerFactory.getLogger(ConnUtil.class);
/**
* 选择列导出(单sheet)
* @param fileNameUrl 文件导出服务器路径
* @param sheetName sheet名称
* @param dataList 数据list(map封装)
* @param excelRows 导出的选择的列
* @param title 标题(为空就传null)
*/
public static void exportExcel(String fileNameUrl, String sheetName, List<Map<String,Object>> dataList, List<ExcelExportDTO> excelRows,String title) throws Exception{
// 使用easypoi中的ExcelExportEntity对象存储要导出的列
List<ExcelExportEntity> entityList = new ArrayList<>();
excelRows.forEach(item->{
ExcelExportEntity exportEntity = new ExcelExportEntity(item.getLineName(), item.getFieldName());
exportEntity.setHeight(item.getHeight());
exportEntity.setWidth(item.getWidth());
entityList.add(exportEntity);
});
// 执行方法
ExportParams exportParams = new ExportParams(title, sheetName, ExcelType.XSSF);
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList ,dataList);
String fileName = fileNameUrl;
File file = new File(fileName);
try{
FileOutputStream fout = new FileOutputStream(file);
workbook.write(fout);
fout.close();
}catch (Exception e){
logger.error("导出失败-----------------------------------");
throw new Exception("导出失败!");
}
}
/**
* 多sheet导出
* @param fileNameUrl 文件导出服务器路径
* @param multiSheetDTOList 多sheet中的属性
*/
public static void exportMultiSheetExcel(String fileNameUrl, List<MultiSheetDTO> multiSheetDTOList) throws Exception{
try{
Workbook workbook = new HSSFWorkbook();
// 遍历sheet
for (MultiSheetDTO multiSheetDTO:multiSheetDTOList){
ExcelExportService server = new ExcelExportService();
ExportParams exportParams = new ExportParams(multiSheetDTO.getTitle(), multiSheetDTO.getSheetName(), ExcelType.XSSF);
List<ExcelExportEntity> entityList = new ArrayList<>();
multiSheetDTO.getExcelRows().forEach(item->{
ExcelExportEntity exportEntity = new ExcelExportEntity(item.getLineName(), item.getFieldName());
exportEntity.setHeight(item.getHeight());
exportEntity.setWidth(item.getWidth());
entityList.add(exportEntity);
});
server.createSheetForMap(workbook, exportParams, entityList, multiSheetDTO.getDataList());
}
FileOutputStream fos = new FileOutputStream(fileNameUrl);
workbook.write(fos);
fos.close();
}catch (Exception e){
logger.error("导出失败-----------------------------------");
throw new Exception("导出失败!");
}
}
}
依靠的一些其他类
ExcelExportDTO:
package com.tdh.light.spxt.api.domain.dto.excel;
/**
* @author zhangz
* @desc 动态选择列参数
* @date 2020/6/16
*/
public class ExcelExportDTO {
private String lineName;
private String fieldName;
private Double width = 20D;
private Double height = 10D;
public ExcelExportDTO(){}
public ExcelExportDTO(String lineName, String fieldName) {
this.lineName = lineName;
this.fieldName = fieldName;
}
public ExcelExportDTO(String lineName, String fieldName, Double width, Double height) {
this.lineName = lineName;
this.fieldName = fieldName;
this.width = width;
this.height = height;
}
public String getLineName() {
return lineName;
}
public void setLineName(String lineName) {
this.lineName = lineName;
}
public String getFieldName() {
return fieldName;
}
public void setFieldName(String fieldName) {
this.fieldName = fieldName;
}
public Double getWidth() {
return width;
}
public void setWidth(Double width) {
this.width = width;
}
public Double getHeight() {
return height;
}
public void setHeight(Double height) {
this.height = height;
}
}
MultiSheetDTO:
package com.tdh.light.spxt.api.domain.dto.excel;
import java.util.List;
import java.util.Map;
/**
* @author zhangz
* @desc 多sheet传参
* @date 2020/6/16
*/
public class MultiSheetDTO {
/**
* sheet名称
*/
private String sheetName;
/**
* 导出数据
*/
private List<Map<String,Object>> dataList;
/**
* 导出列属性
*/
private List<ExcelExportDTO> excelRows;
/**
* title
*/
private String title;
public String getSheetName() {
return sheetName;
}
public void setSheetName(String sheetName) {
this.sheetName = sheetName;
}
public List<Map<String, Object>> getDataList() {
return dataList;
}
public void setDataList(List<Map<String, Object>> dataList) {
this.dataList = dataList;
}
public List<ExcelExportDTO> getExcelRows() {
return excelRows;
}
public void setExcelRows(List<ExcelExportDTO> excelRows) {
this.excelRows = excelRows;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
这里面主要依靠了ExcelExportEntity 这个类来动态生成某个列
2103

被折叠的 条评论
为什么被折叠?



