1 entity 定义:
/**
* @title DifferenceEntryExcelVO
* @description 模板导入
* @auth tangjd
* @create 2023/5/8 17:23
**/
@Data
public class DifferenceEntryExcelVO implements Serializable {
@ExcelProperty(index = 0)
@ApiModelProperty("序号")
private Integer serialNumber;
@ExcelProperty(index = 1)
private String voucherType;
@ExcelProperty(index = 2)
@ApiModelProperty("号码")
private String digitalTicketNumber;
@ExcelProperty(index = 3)
@ApiModelProperty("代码")
private String invoiceCode;
@ExcelProperty(index = 4)
@ApiModelProperty("号码")
private String invoiceNumber;
@ExcelProperty(index = 5)
@ApiModelProperty("凭证号码")
private String voucherNumber;
@ExcelProperty(index = 6)
@ApiModelProperty("开具日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private String dateOfIssuance;
@ExcelProperty(index = 7)
@ApiModelProperty("凭证合计金额")
private String totalVoucherAmount;
@ExcelProperty(index = 8)
@ApiModelProperty("本次扣除金额")
private String currentAmountDeducted;
@ExcelProperty(index = 9)
@ApiModelProperty("备注")
private String notes;
}
2:service
/**
* @title UploadExcelAnalysisService
* @description 上传excel 解析service
* @auth tangjd
* @create 2023/5/8 17:42
**/
public interface UploadExcelAnalysisService {
/**
* 将上传的excel 解析为具体的类型对象
*
* @param t 目标
* @param headRowNumber 第几行开始读
* @param excelFiles 上传的excel
* @param <T>
* @return
*/
<T> List<T> uploadExcelAnalysis(Class t, int headRowNumber, MultipartFile excelFiles) throws Exception;
}
3: serviceImpl
/**
* @title UploadExcelAnalysisServiceImpl
* @description
* @auth tangjd
* @create 2023/5/8 17:43
**/
@Service("uploadExcelAnalysisService")
@Slf4j
public class UploadExcelAnalysisServiceImpl implements UploadExcelAnalysisService {
/**
* 将上传的excel 解析为具体的类型对象
*
* @param t 目标
* @param headRowNumber 第几行开始读
* @param excelFiles 上传的excel
* @param <T>
* @return
*/
@Override
public <T> List<T> uploadExcelAnalysis(Class t, int headRowNumber, MultipartFile excelFiles) throws Exception {
List<T> result = new ArrayList<>();
// 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭
EasyExcel.read(excelFiles.getInputStream(), t, new SyncReadListener() {
//读取每一行进行的操作
@Override
public void invoke(Object object, AnalysisContext context) {
result.add((T) object);
}
//读取表头
@Override
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
// System.out.println("表头信息:"+headMap);
}
}).headRowNumber(headRowNumber).doReadAll();//.headRowNumber(3)表示从第几行开始读取,有的文件title不在第一行
// 注意如果有隐藏sheet, 需要指定sheet名称或者索引,如下所示
//}).sheet(sheetName).headRowNumber(headRowNumber).doRead();//.headRowNumber(3)表示从第几行开始读取,有的文件title不在第一行
return result;
}
}
4: controller
/**
* @title ImportExcelController
* @description excel 导入解析
* @auth tangjd
* @create 2023/5/8 17:18
**/
@Api(tags = "excel 导入解析")
@RestController
@RequestMapping("/upload/excel/analysis")
@Slf4j
public class UploadExcelAnalysisController {
@Resource
private UploadExcelAnalysisService uploadExcelAnalysisService;
@ApiOperation("模板导入excel解析返回")
@PostMapping("/difference-entry")
public R uploadExcelAnalysis(@RequestParam(value = "files", required = true) MultipartFile excelFiles) {
uploadExcelAnalysisService.uploadExcelAnalysis(DifferenceEntryExcelVO.class, 3, excelFiles));
// xxx处理
}