forked from wuweidong/hzims-back-huoshan
walton
1 month ago
8 changed files with 666 additions and 27 deletions
@ -0,0 +1,26 @@
|
||||
package com.hnac.hzims.operational.duty.entity; |
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty; |
||||
import io.swagger.annotations.ApiModelProperty; |
||||
import lombok.Data; |
||||
|
||||
import java.io.Serializable; |
||||
|
||||
@Data |
||||
public class SchedulingExcelDTO implements Serializable { |
||||
@ExcelProperty(value = "日期(必填)",index = 0 ) |
||||
@ApiModelProperty(value = "日期-天") |
||||
private String day; |
||||
/** |
||||
* 编码 |
||||
*/ |
||||
@ExcelProperty(value = "主值(必填)",index = 1 ) |
||||
@ApiModelProperty(value = "主值") |
||||
private String mainDuty; |
||||
/** |
||||
* 规格 |
||||
*/ |
||||
@ExcelProperty(value = "副值(必填)",index = 2 ) |
||||
@ApiModelProperty(value = "副值") |
||||
private String deputyDuty; |
||||
} |
@ -0,0 +1,33 @@
|
||||
package com.hnac.hzims.operational.duty.utils; |
||||
|
||||
import com.alibaba.excel.context.AnalysisContext; |
||||
import com.alibaba.excel.event.AnalysisEventListener; |
||||
import com.alibaba.fastjson.JSONObject; |
||||
import lombok.Data; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.Collections; |
||||
import java.util.List; |
||||
|
||||
@Slf4j |
||||
@Data |
||||
public class ExcelToolListener extends AnalysisEventListener { |
||||
|
||||
/**保存数据**/ |
||||
private List<Object> dataList = Collections.synchronizedList(new ArrayList<>()); |
||||
|
||||
public ExcelToolListener() { |
||||
} |
||||
|
||||
@Override |
||||
public void invoke(Object data, AnalysisContext context) { |
||||
dataList.add(data); |
||||
} |
||||
|
||||
@Override |
||||
public void doAfterAllAnalysed(AnalysisContext context) { |
||||
log.info("解析完成"); |
||||
log.info("------结果集为:{}------", JSONObject.toJSONString(dataList)); |
||||
} |
||||
} |
@ -0,0 +1,348 @@
|
||||
package com.hnac.hzims.operational.duty.utils; |
||||
|
||||
import com.alibaba.excel.EasyExcel; |
||||
import com.alibaba.excel.EasyExcelFactory; |
||||
import com.alibaba.excel.event.AnalysisEventListener; |
||||
import com.alibaba.excel.write.handler.WriteHandler; |
||||
import org.apache.poi.ss.formula.functions.T; |
||||
|
||||
import java.io.File; |
||||
import java.io.InputStream; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
import java.util.Set; |
||||
|
||||
/** |
||||
* @author hx |
||||
*/ |
||||
public class ExcelUtil { |
||||
/** |
||||
* 同步无模型读(默认读取sheet0,从第2行开始读) |
||||
* @param filePath |
||||
* @return |
||||
*/ |
||||
public static List<Map<Integer, String>> syncRead(String filePath){ |
||||
return EasyExcelFactory.read(filePath).sheet().doReadSync(); |
||||
} |
||||
|
||||
/** |
||||
* 同步无模型读(默认表头占一行,从第2行开始读) |
||||
* @param filePath |
||||
* @param sheetNo sheet页号,从0开始 |
||||
* @return |
||||
*/ |
||||
public static List<Map<Integer, String>> syncRead(String filePath, Integer sheetNo){ |
||||
return EasyExcelFactory.read(filePath).sheet(sheetNo).doReadSync(); |
||||
} |
||||
|
||||
/** |
||||
* 同步无模型读(指定sheet和表头占的行数) |
||||
* @param inputStream |
||||
* @param sheetNo sheet页号,从0开始 |
||||
* @param headRowNum 表头占的行数,从0开始(如果要连表头一起读出来则传0) |
||||
* @return List<Map<colNum, cellValue>> |
||||
*/ |
||||
public static List<Map<Integer, String>> syncRead(InputStream inputStream, Integer sheetNo, Integer headRowNum){ |
||||
return EasyExcelFactory.read(inputStream).sheet(sheetNo).headRowNumber(headRowNum).doReadSync(); |
||||
} |
||||
|
||||
/** |
||||
* 同步无模型读(指定sheet和表头占的行数) |
||||
* @param file |
||||
* @param sheetNo sheet页号,从0开始 |
||||
* @param headRowNum 表头占的行数,从0开始(如果要连表头一起读出来则传0) |
||||
* @return List<Map<colNum, cellValue>> |
||||
*/ |
||||
public static List<Map<Integer, String>> syncRead(File file, Integer sheetNo, Integer headRowNum){ |
||||
return EasyExcelFactory.read(file).sheet(sheetNo).headRowNumber(headRowNum).doReadSync(); |
||||
} |
||||
|
||||
/** |
||||
* 同步无模型读(指定sheet和表头占的行数) |
||||
* @param filePath |
||||
* @param sheetNo sheet页号,从0开始 |
||||
* @param headRowNum 表头占的行数,从0开始(如果要连表头一起读出来则传0) |
||||
* @return List<Map<colNum, cellValue>> |
||||
*/ |
||||
public static List<Map<Integer, String>> syncRead(String filePath, Integer sheetNo, Integer headRowNum){ |
||||
return EasyExcelFactory.read(filePath).sheet(sheetNo).headRowNumber(headRowNum).doReadSync(); |
||||
} |
||||
|
||||
/** |
||||
* 同步按模型读(默认读取sheet0,从第2行开始读) |
||||
* @param filePath |
||||
* @param clazz 模型的类类型(excel数据会按该类型转换成对象) |
||||
* @return |
||||
*/ |
||||
public static List<T> syncReadModel(String filePath, Class clazz){ |
||||
return EasyExcelFactory.read(filePath).sheet().head(clazz).doReadSync(); |
||||
} |
||||
|
||||
/** |
||||
* 同步按模型读(默认表头占一行,从第2行开始读) |
||||
* @param filePath |
||||
* @param clazz 模型的类类型(excel数据会按该类型转换成对象) |
||||
* @param sheetNo sheet页号,从0开始 |
||||
* @return |
||||
*/ |
||||
public static List<T> syncReadModel(String filePath, Class clazz, Integer sheetNo){ |
||||
return EasyExcelFactory.read(filePath).sheet(sheetNo).head(clazz).doReadSync(); |
||||
} |
||||
|
||||
/** |
||||
* 同步按模型读(指定sheet和表头占的行数) |
||||
* @param inputStream |
||||
* @param clazz 模型的类类型(excel数据会按该类型转换成对象) |
||||
* @param sheetNo sheet页号,从0开始 |
||||
* @param headRowNum 表头占的行数,从0开始(如果要连表头一起读出来则传0) |
||||
* @return |
||||
*/ |
||||
public static List<T> syncReadModel(InputStream inputStream, Class clazz, Integer sheetNo, Integer headRowNum){ |
||||
return EasyExcelFactory.read(inputStream).sheet(sheetNo).headRowNumber(headRowNum).head(clazz).doReadSync(); |
||||
} |
||||
|
||||
/** |
||||
* 同步按模型读(指定sheet和表头占的行数) |
||||
* @param file |
||||
* @param clazz 模型的类类型(excel数据会按该类型转换成对象) |
||||
* @param sheetNo sheet页号,从0开始 |
||||
* @param headRowNum 表头占的行数,从0开始(如果要连表头一起读出来则传0) |
||||
* @return |
||||
*/ |
||||
public static List<T> syncReadModel(File file, Class clazz, Integer sheetNo, Integer headRowNum){ |
||||
return EasyExcelFactory.read(file).sheet(sheetNo).headRowNumber(headRowNum).head(clazz).doReadSync(); |
||||
} |
||||
|
||||
/** |
||||
* 同步按模型读(指定sheet和表头占的行数) |
||||
* @param filePath |
||||
* @param clazz 模型的类类型(excel数据会按该类型转换成对象) |
||||
* @param sheetNo sheet页号,从0开始 |
||||
* @param headRowNum 表头占的行数,从0开始(如果要连表头一起读出来则传0) |
||||
* @return |
||||
*/ |
||||
public static List<T> syncReadModel(String filePath, Class clazz, Integer sheetNo, Integer headRowNum){ |
||||
return EasyExcelFactory.read(filePath).sheet(sheetNo).headRowNumber(headRowNum).head(clazz).doReadSync(); |
||||
} |
||||
|
||||
/** |
||||
* 异步无模型读(默认读取sheet0,从第2行开始读) |
||||
* @param excelListener 监听器,在监听器中可以处理行数据LinkedHashMap,表头数据,异常处理等 |
||||
* @param filePath 表头占的行数,从0开始(如果要连表头一起读出来则传0) |
||||
* @return |
||||
*/ |
||||
public static void asyncRead(String filePath, AnalysisEventListener<T> excelListener){ |
||||
EasyExcelFactory.read(filePath, excelListener).sheet().doRead(); |
||||
} |
||||
|
||||
/** |
||||
* 异步无模型读(默认表头占一行,从第2行开始读) |
||||
* @param filePath 表头占的行数,从0开始(如果要连表头一起读出来则传0) |
||||
* @param excelListener 监听器,在监听器中可以处理行数据LinkedHashMap,表头数据,异常处理等 |
||||
* @param sheetNo sheet页号,从0开始 |
||||
* @return |
||||
*/ |
||||
public static void asyncRead(String filePath, AnalysisEventListener<T> excelListener, Integer sheetNo){ |
||||
EasyExcelFactory.read(filePath, excelListener).sheet(sheetNo).doRead(); |
||||
} |
||||
|
||||
/** |
||||
* 异步无模型读(指定sheet和表头占的行数) |
||||
* @param inputStream |
||||
* @param excelListener 监听器,在监听器中可以处理行数据LinkedHashMap,表头数据,异常处理等 |
||||
* @param sheetNo sheet页号,从0开始 |
||||
* @param headRowNum 表头占的行数,从0开始(如果要连表头一起读出来则传0) |
||||
* @return |
||||
*/ |
||||
public static void asyncRead(InputStream inputStream, AnalysisEventListener<T> excelListener, Integer sheetNo, Integer headRowNum){ |
||||
EasyExcelFactory.read(inputStream, excelListener).sheet(sheetNo).headRowNumber(headRowNum).doRead(); |
||||
} |
||||
|
||||
/** |
||||
* 异步无模型读(指定sheet和表头占的行数) |
||||
* @param file |
||||
* @param excelListener 监听器,在监听器中可以处理行数据LinkedHashMap,表头数据,异常处理等 |
||||
* @param sheetNo sheet页号,从0开始 |
||||
* @param headRowNum 表头占的行数,从0开始(如果要连表头一起读出来则传0) |
||||
* @return |
||||
*/ |
||||
public static void asyncRead(File file, AnalysisEventListener<T> excelListener, Integer sheetNo, Integer headRowNum){ |
||||
EasyExcelFactory.read(file, excelListener).sheet(sheetNo).headRowNumber(headRowNum).doRead(); |
||||
} |
||||
|
||||
/** |
||||
* 异步无模型读(指定sheet和表头占的行数) |
||||
* @param filePath |
||||
* @param excelListener 监听器,在监听器中可以处理行数据LinkedHashMap,表头数据,异常处理等 |
||||
* @param sheetNo sheet页号,从0开始 |
||||
* @param headRowNum 表头占的行数,从0开始(如果要连表头一起读出来则传0) |
||||
* @return |
||||
*/ |
||||
public static void asyncRead(String filePath, AnalysisEventListener<T> excelListener, Integer sheetNo, Integer headRowNum){ |
||||
EasyExcelFactory.read(filePath, excelListener).sheet(sheetNo).headRowNumber(headRowNum).doRead(); |
||||
} |
||||
|
||||
/** |
||||
* 异步按模型读取(默认读取sheet0,从第2行开始读) |
||||
* @param filePath |
||||
* @param excelListener 监听器,在监听器中可以处理行数据LinkedHashMap,表头数据,异常处理等 |
||||
* @param clazz 模型的类类型(excel数据会按该类型转换成对象) |
||||
*/ |
||||
public static void asyncReadModel(String filePath, AnalysisEventListener<T> excelListener, Class clazz){ |
||||
EasyExcelFactory.read(filePath, clazz, excelListener).sheet().doRead(); |
||||
} |
||||
|
||||
/** |
||||
* 异步按模型读取(默认表头占一行,从第2行开始读) |
||||
* @param filePath |
||||
* @param excelListener 监听器,在监听器中可以处理行数据LinkedHashMap,表头数据,异常处理等 |
||||
* @param clazz 模型的类类型(excel数据会按该类型转换成对象) |
||||
* @param sheetNo sheet页号,从0开始 |
||||
*/ |
||||
public static void asyncReadModel(String filePath, AnalysisEventListener<T> excelListener, Class clazz, Integer sheetNo){ |
||||
EasyExcelFactory.read(filePath, clazz, excelListener).sheet(sheetNo).doRead(); |
||||
} |
||||
|
||||
/** |
||||
* 异步按模型读取 |
||||
* @param inputStream |
||||
* @param excelListener 监听器,在监听器中可以处理行数据LinkedHashMap,表头数据,异常处理等 |
||||
* @param clazz 模型的类类型(excel数据会按该类型转换成对象) |
||||
* @param sheetNo sheet页号,从0开始 |
||||
* @param headRowNum 表头占的行数,从0开始(如果要连表头一起读出来则传0) |
||||
*/ |
||||
public static void asyncReadModel(InputStream inputStream, AnalysisEventListener<T> excelListener, Class clazz, Integer sheetNo, Integer headRowNum){ |
||||
EasyExcelFactory.read(inputStream, clazz, excelListener).sheet(sheetNo).headRowNumber(headRowNum).doRead(); |
||||
} |
||||
|
||||
/** |
||||
* 异步按模型读取 |
||||
* @param file |
||||
* @param excelListener 监听器,在监听器中可以处理行数据LinkedHashMap,表头数据,异常处理等 |
||||
* @param clazz 模型的类类型(excel数据会按该类型转换成对象) |
||||
* @param sheetNo sheet页号,从0开始 |
||||
* @param headRowNum 表头占的行数,从0开始(如果要连表头一起读出来则传0) |
||||
*/ |
||||
public static void asyncReadModel(File file, AnalysisEventListener<T> excelListener, Class clazz, Integer sheetNo, Integer headRowNum){ |
||||
EasyExcelFactory.read(file, clazz, excelListener).sheet(sheetNo).headRowNumber(headRowNum).doRead(); |
||||
} |
||||
|
||||
/** |
||||
* 异步按模型读取 |
||||
* @param filePath |
||||
* @param excelListener 监听器,在监听器中可以处理行数据LinkedHashMap,表头数据,异常处理等 |
||||
* @param clazz 模型的类类型(excel数据会按该类型转换成对象) |
||||
* @param sheetNo sheet页号,从0开始 |
||||
* @param headRowNum 表头占的行数,从0开始(如果要连表头一起读出来则传0) |
||||
*/ |
||||
public static void asyncReadModel(String filePath, AnalysisEventListener<T> excelListener, Class clazz, Integer sheetNo, Integer headRowNum){ |
||||
EasyExcelFactory.read(filePath, clazz, excelListener).sheet(sheetNo).headRowNumber(headRowNum).doRead(); |
||||
} |
||||
|
||||
/** |
||||
* 无模板写文件 |
||||
* @param filePath |
||||
* @param head 表头数据 |
||||
* @param data 表内容数据 |
||||
*/ |
||||
public static void write(String filePath, List<List<String>> head, List<List<Object>> data){ |
||||
EasyExcel.write(filePath).head(head).sheet().doWrite(data); |
||||
} |
||||
|
||||
/** |
||||
* 无模板写文件 |
||||
* @param filePath |
||||
* @param head 表头数据 |
||||
* @param data 表内容数据 |
||||
* @param sheetNo sheet页号,从0开始 |
||||
* @param sheetName sheet名称 |
||||
*/ |
||||
public static void write(String filePath, List<List<String>> head, List<List<Object>> data, Integer sheetNo, String sheetName){ |
||||
EasyExcel.write(filePath).head(head).sheet(sheetNo, sheetName).doWrite(data); |
||||
} |
||||
|
||||
/** |
||||
* 根据excel模板文件写入文件 |
||||
* @param filePath |
||||
* @param templateFileName |
||||
* @param headClazz |
||||
* @param data |
||||
*/ |
||||
public static void writeTemplate(String filePath, String templateFileName, Class headClazz, List data){ |
||||
EasyExcel.write(filePath, headClazz).withTemplate(templateFileName).sheet().doWrite(data); |
||||
} |
||||
|
||||
/** |
||||
* 根据excel模板文件写入文件 |
||||
* @param filePath |
||||
* @param templateFileName |
||||
* @param data |
||||
*/ |
||||
public static void writeTemplate(String filePath, String templateFileName, List data){ |
||||
EasyExcel.write(filePath).withTemplate(templateFileName).sheet().doWrite(data); |
||||
} |
||||
|
||||
/** |
||||
* 按模板写文件 |
||||
* @param filePath |
||||
* @param headClazz 表头模板 |
||||
* @param data 数据 |
||||
*/ |
||||
public static void write(String filePath, Class headClazz, List data){ |
||||
EasyExcel.write(filePath, headClazz).sheet().doWrite(data); |
||||
} |
||||
|
||||
/** |
||||
* 按模板写文件 |
||||
* @param filePath |
||||
* @param headClazz 表头模板 |
||||
* @param data 数据 |
||||
* @param sheetNo sheet页号,从0开始 |
||||
* @param sheetName sheet名称 |
||||
*/ |
||||
public static void write(String filePath, Class headClazz, List data, Integer sheetNo, String sheetName){ |
||||
EasyExcel.write(filePath, headClazz).sheet(sheetNo, sheetName).doWrite(data); |
||||
} |
||||
|
||||
/** |
||||
* 按模板写文件 |
||||
* @param filePath |
||||
* @param headClazz 表头模板 |
||||
* @param data 数据 |
||||
* @param writeHandler 自定义的处理器,比如设置table样式,设置超链接、单元格下拉框等等功能都可以通过这个实现(需要注册多个则自己通过链式去调用) |
||||
* @param sheetNo sheet页号,从0开始 |
||||
* @param sheetName sheet名称 |
||||
*/ |
||||
public static void write(String filePath, Class headClazz, List data, WriteHandler writeHandler, Integer sheetNo, String sheetName){ |
||||
EasyExcel.write(filePath, headClazz).registerWriteHandler(writeHandler).sheet(sheetNo, sheetName).doWrite(data); |
||||
} |
||||
|
||||
/** |
||||
* 按模板写文件(包含某些字段) |
||||
* @param filePath |
||||
* @param headClazz 表头模板 |
||||
* @param data 数据 |
||||
* @param includeCols 过滤包含的字段,根据字段名称过滤 |
||||
* @param sheetNo sheet页号,从0开始 |
||||
* @param sheetName sheet名称 |
||||
*/ |
||||
public static void writeInclude(String filePath, Class headClazz, List data, Set<String> includeCols, Integer sheetNo, String sheetName){ |
||||
EasyExcel.write(filePath, headClazz).includeColumnFiledNames(includeCols).sheet(sheetNo, sheetName).doWrite(data); |
||||
} |
||||
|
||||
/** |
||||
* 按模板写文件(排除某些字段) |
||||
* @param filePath |
||||
* @param headClazz 表头模板 |
||||
* @param data 数据 |
||||
* @param excludeCols 过滤排除的字段,根据字段名称过滤 |
||||
* @param sheetNo sheet页号,从0开始 |
||||
* @param sheetName sheet名称 |
||||
*/ |
||||
public static void writeExclude(String filePath, Class headClazz, List data, Set<String> excludeCols, Integer sheetNo, String sheetName){ |
||||
EasyExcel.write(filePath, headClazz).excludeColumnFiledNames(excludeCols).sheet(sheetNo, sheetName).doWrite(data); |
||||
} |
||||
|
||||
|
||||
} |
||||
|
Loading…
Reference in new issue