导出excel

master
wangwei 2 years ago
parent 5653ecac41
commit 7d6341a9c2

@ -294,6 +294,21 @@
<artifactId>iTextAsian</artifactId>
<version>3.0</version>
</dependency>
<!--excel-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.10</version>
</dependency>
<dependency>
<groupId>hu.blackbelt.bundles.swagger-parser</groupId>
<artifactId>io.swagger.parser</artifactId>
<version>1.0.47_1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.xmlgraphics/batik-bridge -->

@ -0,0 +1,100 @@
package com.glxp.api.controller.inv;
import com.glxp.api.common.res.BaseResponse;
import com.glxp.api.entity.inout.IoStatDayEntity;
import com.glxp.api.req.inout.FilterStatDataDetailRequest;
import com.glxp.api.service.inout.ExcelService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* @author : zhangsan
* @date : 2023/4/17 11:14
* @modyified By :
*/
@RestController
@Api(tags = "文件接口")
public class ApiExcelController {
@Resource
private ExcelService excelService;
/**
* excel-sheet
*
* @param multipartFile
* @return
* @throws Exception
*/
@PostMapping("/excelImport")
@ApiOperation(value = "excel导入")
public BaseResponse<Object> excelImport(@RequestParam("file") MultipartFile multipartFile){
excelService.excelImport(multipartFile);
return new BaseResponse<>();
}
/**
* excel-sheet
*
* @param response
*/
@GetMapping("/udiwms/inv/excelExportOut")
public void export(HttpServletResponse response,String billNo) {
excelService.excelExport(response,billNo);
}
/**
* excel-sheet
*
* @param multipartFile
* @return
*/
@PostMapping("/excelSheetImport")
@ApiOperation(value = "excel导入-多个sheet")
public BaseResponse<Object> excelSheetImport(@RequestParam("file") MultipartFile multipartFile){
excelService.excelSheetImport(multipartFile);
return new BaseResponse<>();
}
/**
* excel-sheet
*
* @param response
*/
@ApiOperation(value = "excel导出-多个sheet", httpMethod = "GET")
@GetMapping("/excelSheetExport")
public void excelSheetExport(HttpServletResponse response) {
excelService.excelSheetExport(response);
}
/**
* excel-sheet
*
* @param response
*/
@ApiOperation(value = "excel模板导出", httpMethod = "GET")
@GetMapping("/excelTemplate")
public void excelTemplate(HttpServletResponse response) {
excelService.excelTemplate(response);
}
/**
* excel-sheet
*
* @param response
*/
@ApiOperation(value = "excel模板导出-多个sheet", httpMethod = "GET")
@GetMapping("/excelSheetTemplate")
public void excelSheetTemplate(HttpServletResponse response) throws Exception {
excelService.excelSheetTemplate(response);
}
}

@ -18,4 +18,6 @@ public interface IoStatDayDao extends BaseMapper<IoStatDayEntity> {
* @return
*/
List<IoStatDayEntity> filterList(FilterStatDataDetailRequest statDataDetailRequest);
List<IoStatDayEntity> filterListByRecordKey(String recordKey);
}

@ -0,0 +1,104 @@
package com.glxp.api.entity.inout;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author : zhangsan
* @date : 2023/4/17 11:11
* @modyified By :
*/
@Data
@ApiModel(value = "导出实体")
public class ExcelVO {
@ColumnWidth(80)
@ExcelProperty("序号")
@ApiModelProperty(value = "序号")
private Integer id;
@ColumnWidth(80)
@ExcelProperty("产品通用名")
@ApiModelProperty(value = "产品通用名")
private String productName;
@ColumnWidth(80)
@ExcelProperty("规格型号")
@ApiModelProperty(value = "规格型号")
private String ggxh;
@ColumnWidth(80)
@ExcelProperty("批次号")
@ApiModelProperty(value = "批次号")
private String batchNo;
@ColumnWidth(80)
@ExcelProperty("数量")
@ApiModelProperty(value = "数量")
private Integer beginCount;
@ColumnWidth(80)
@ExcelProperty("价格")
@ApiModelProperty(value = "价格")
private BigDecimal beginPrice;
@ColumnWidth(80)
@ExcelProperty("金额")
@ApiModelProperty(value = "金额")
private BigDecimal beginAmount;
@ColumnWidth(80)
@ExcelProperty("数量")
@ApiModelProperty(value = "数量")
private Integer inCount;
@ColumnWidth(80)
@ExcelProperty("价格")
@ApiModelProperty(value = "价格")
private BigDecimal inPrice;
@ColumnWidth(80)
@ExcelProperty("金额")
@ApiModelProperty(value = "金额")
private BigDecimal inAmount;
@ColumnWidth(80)
@ExcelProperty("数量")
@ApiModelProperty(value = "数量")
private Integer outCount;
@ColumnWidth(80)
@ExcelProperty("价格")
@ApiModelProperty(value = "价格")
private BigDecimal outPrice;
@ColumnWidth(80)
@ExcelProperty("金额")
@ApiModelProperty(value = "金额")
private BigDecimal outAmount;
@ColumnWidth(80)
@ExcelProperty("数量")
@ApiModelProperty(value = "数量")
private Integer balanceCount;
@ColumnWidth(80)
@ExcelProperty("价格")
@ApiModelProperty(value = "价格")
private BigDecimal balancePrice;
@ColumnWidth(80)
@ExcelProperty("金额")
@ApiModelProperty(value = "金额")
private BigDecimal balanceAmount;
//无需导出字段使用此注解
//@JsonSerialize(using = ToStringSerializer.class)
}

@ -17,6 +17,7 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.glxp.api.idc.utils.TableUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.text.WordUtils;
import org.apache.tools.ant.util.DateUtils;

@ -0,0 +1,14 @@
package com.glxp.api.req.inout;
import lombok.Data;
/**
* @author : zhangsan
* @date : 2023/4/17 13:52
* @modyified By :
*/
@Data
public class ExcelRequest {
}

@ -0,0 +1,63 @@
package com.glxp.api.service.inout;
/**
* @author : zhangsan
* @date : 2023/4/17 11:12
* @modyified By :
*/
import com.glxp.api.entity.inout.IoStatDayEntity;
import com.glxp.api.req.inout.FilterStatDataDetailRequest;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
*
*/
public interface ExcelService {
/**
* excel-sheet
*
* @param multipartFile
*/
void excelImport(MultipartFile multipartFile);
/**
* excel-sheet
*
* @param response
*/
void excelExport(HttpServletResponse response,String billNo);
/**
* excel-sheet
*
* @param multipartFile
*/
void excelSheetImport(MultipartFile multipartFile);
/**
* excel-sheet
*
* @param response
*/
void excelSheetExport(HttpServletResponse response);
/**
* excel-sheet
*
* @param response
*/
void excelTemplate(HttpServletResponse response);
/**
* excel-sheet
*
* @param response
*/
void excelSheetTemplate(HttpServletResponse response) throws Exception;
}

@ -25,4 +25,6 @@ public interface IoStatDayService {
* @return
*/
List<IoStatDayEntity> filterList(FilterStatDataDetailRequest statDataDetailRequest);
List<IoStatDayEntity> filterListByRecordKey(String recordKey);
}

@ -0,0 +1,223 @@
package com.glxp.api.service.inout.impl;
/**
* @author : zhangsan
* @date : 2023/4/17 11:13
* @modyified By :
*/
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.glxp.api.entity.inout.ExcelVO;
import com.glxp.api.entity.inout.IoStatDayEntity;
import com.glxp.api.req.inout.FilterStatDataDetailRequest;
import com.glxp.api.service.inout.ExcelService;
import com.glxp.api.service.inout.IoStatDayService;
import com.glxp.api.util.Excel.ExcelHandler;
import com.glxp.api.util.Excel.ExcelTemplateEnum;
import com.glxp.api.util.Excel.Exception.RenException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.*;
/**
*
*/
@Slf4j
@Service
public class ExcelServiceImpl implements ExcelService {
@Resource
ExcelHandler excelHandler;
@Resource
private IoStatDayService statDayService;
/**
* excel-sheet
*
* @param multipartFile
*/
@Override
public void excelImport(MultipartFile multipartFile) {
try {
List<ExcelVO> voList = excelHandler.importExcel(multipartFile, ExcelVO.class, null);
if (CollectionUtils.isNotEmpty(voList)) {
System.out.println("本次成功导出:" + voList.size() + "条,数据如下---------------");
voList.forEach(vo -> {
System.out.println("vo=" + vo.toString());
});
}
} catch (Exception e) {
throw new RenException("导入失败");
}
}
/**
* excel-sheet
*
* @param response
*/
@Override
public void excelExport(HttpServletResponse response, String billNo) {
try {
List<ExcelVO> excelVOS = structureDate(billNo);
excelHandler.exportExcel(response, excelVOS, ExcelVO.class, "excel导出-单et", "excel导出heet");
} catch (Exception e) {
throw new RenException("导出失败");
}
}
/**
* excel-sheet
*
* @param multipartFile
*/
@Override
public void excelSheetImport(MultipartFile multipartFile) {
try {
List<Integer> indexList = new ArrayList<>();
indexList.add(0);
indexList.add(1);
indexList.add(2);
indexList.add(3);
indexList.add(4);
indexList.add(5);
List<Object> objList = new ArrayList<>();
objList.add(new ExcelVO());
objList.add(new ExcelVO());
objList.add(new ExcelVO());
objList.add(new ExcelVO());
objList.add(new ExcelVO());
objList.add(new ExcelVO());
List<List<Object>> resultList = excelHandler.importExcelsByIndex(multipartFile, objList, 6, indexList);
System.out.println("resultList="+resultList.size());
resultList.forEach(vo->{
List<ExcelVO> voList = JSON.parseArray(JSON.toJSONString(vo), ExcelVO.class);
System.out.println("voList="+voList.size()+"条数据");
});
} catch (Exception e) {
throw new RenException("导入失败");
}
}
/**
* excel-sheet
*
* @param response
*/
@Override
public void excelSheetExport(HttpServletResponse response) {
// try {
// //构建多集合集合
// List<List<?>> lists = new ArrayList<>();
// lists.add(structureDate(10));
// lists.add(structureDate(20));
// lists.add(structureDate(30));
// lists.add(structureDate(40));
// lists.add(structureDate(50));
// lists.add(structureDate(60));
// //Sheet页初始化
// Map<Integer, String> clazzMap = new HashMap<>();
// clazzMap.put(0, "一年级成绩表");
// clazzMap.put(1, "二年级成绩表");
// clazzMap.put(2, "三年级成绩表");
// clazzMap.put(3, "四年级成绩表");
// clazzMap.put(4, "五年级成绩表");
// clazzMap.put(5, "六年级成绩表");
// excelHandler.exportExcels(response, Collections.singletonList(lists), clazzMap, "excel导出-单sheet");
// } catch (Exception e) {
// throw new RenException("导出失败");
// }
}
/**
* excel-sheet
*
* @param response
*/
@Override
public void excelTemplate(HttpServletResponse response) {
// try {
// //准备数据
// JSONObject obj = new JSONObject();
// obj.put("date","2022年");
// obj.put("season","秋季");
// obj.put("user","王远");
// obj.put("userDate",new Date());
// List<ExcelVO> list = structureDate(20);
// excelHandler.exportTemplateExcels(response,list,obj, ExcelTemplateEnum.TEMPLATE_1.getDesc(),ExcelTemplateEnum.TEMPLATE_1.getDesc());
// }catch (Exception e){
// log.error("导出错误:{}", e.getMessage());
// throw new RenException("导出错误");
// }
}
/**
* excel-sheet
*
* @param response
*/
@Override
public void excelSheetTemplate(HttpServletResponse response) throws Exception {
// 准备数据
// JSONObject obj = new JSONObject();
// obj.put("date","2022年");
// obj.put("season","秋季");
// obj.put("user","王远");
// obj.put("userDate",new Date());
// List<ExcelVO> list = structureDate(20);
// excelHandler.exportSheetTemplateExcels(response,list,list,obj,obj, ExcelTemplateEnum.TEMPLATE_1.getDesc(),ExcelTemplateEnum.TEMPLATE_1.getDesc());
}
/**
*
*
* @return
*/
private List<ExcelVO> structureDate(String billNo) {
List<ExcelVO> list = new ArrayList<>();
List<IoStatDayEntity> ioStatDayEntities = statDayService.filterListByRecordKey(billNo);
ExcelVO vo = new ExcelVO();
for (int i=0; i < ioStatDayEntities.size(); i++) {
vo.setId(i+1);
vo.setProductName(ioStatDayEntities.get(i).getProductName());
vo.setGgxh(ioStatDayEntities.get(i).getGgxh());
vo.setBatchNo(ioStatDayEntities.get(i).getBatchNo());
vo.setBeginCount(ioStatDayEntities.get(i).getBeginCount());
vo.setBeginPrice(ioStatDayEntities.get(i).getBeginPrice());
vo.setBeginAmount(ioStatDayEntities.get(i).getBeginAmount());
vo.setInCount(ioStatDayEntities.get(i).getInCount());
vo.setInPrice(ioStatDayEntities.get(i).getInPrice());
vo.setInAmount(ioStatDayEntities.get(i).getInAmount());
vo.setOutCount(ioStatDayEntities.get(i).getOutCount());
vo.setOutPrice(ioStatDayEntities.get(i).getOutPrice());
vo.setOutAmount(ioStatDayEntities.get(i).getOutAmount());
vo.setBalanceCount(ioStatDayEntities.get(i).getBalanceCount());
vo.setBalancePrice(ioStatDayEntities.get(i).getBalancePrice());
vo.setBalanceAmount(ioStatDayEntities.get(i).getBalanceAmount());
list.add(vo);
}
// for (int i = 0; i < size; i++) {
// ExcelVO vo = new ExcelVO();
// vo.setId(i);
//// vo.setAge(i);
//// vo.setName("张三" + i);
//// vo.setWen(new Random().nextInt(99));
//// vo.setRichard(new Random().nextInt(99));
//// vo.setSum(vo.getWen() + vo.getRichard());
// list.add(vo);
// }
return list;
}
}

@ -99,6 +99,11 @@ public class IoStatDayServiceImpl implements IoStatDayService {
return statDayDao.filterList(statDataDetailRequest);
}
@Override
public List<IoStatDayEntity> filterListByRecordKey(String recordKey) {
return statDayDao.filterListByRecordKey(recordKey);
}
/**
*
*

@ -0,0 +1,274 @@
package com.glxp.api.util.Excel;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.EasyExcelFactory;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.read.builder.ExcelReaderBuilder;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.fill.FillConfig;
import com.glxp.api.util.Excel.Exception.RenException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
* @author : zhangsan
* @date : 2023/4/17 11:06
* @modyified By :
*/
@Slf4j
@Component
public class ExcelHandler {
/**
* excel
* @param file
* @param clazz
* @param sheetNamesheet [sheet]
* @throws Exception
*/
public <T> List<T> importExcel(MultipartFile file, Class<T> clazz, String sheetName) throws Exception{
this.checkFile(file);
UploadDataListener<T> uploadDataListener = new UploadDataListener<>();
ExcelReaderBuilder builder = EasyExcelFactory.read(file.getInputStream(), clazz, uploadDataListener);
if (StringUtils.isEmpty(sheetName)) {
builder.sheet().doRead();
} else {
builder.sheet(sheetName).doRead();
}
return uploadDataListener.getList();
}
/**
* sheet
* @param multipartFile
* @param objList sheet
* @param index sheet
* @param indexList sheet
* @param <T>
* @return <T> List<List<T>>
* @throws Exception
*/
public <T> List<List<T>> importExcelsByIndex(MultipartFile multipartFile, List<T> objList, int index,List<Integer> indexList) throws Exception {
if (multipartFile == null) {
throw new RenException("文件为空");
}
List<List<T>> resultList = new LinkedList<>();
//初始化导入sheet页实体类型下标
int objListClass = 0;
for (int i = 0; i < index; i++) {
if(indexList.contains(i)){
UploadDataListener<T> uploadDataListener = new UploadDataListener<>();
List<T> excels;
EasyExcelFactory.read(multipartFile.getInputStream(), objList.get(objListClass).getClass(), uploadDataListener).sheet(i).doRead();
excels = uploadDataListener.getList();
resultList.add(excels);
objListClass++;
}
}
return resultList;
}
/**
* sheet
* @param file
* @param indexsheet [030 1 2]
* @param paramssheet[index33]
* @param <T>
* @return
*/
public <T> List<List<T>> importExcels(MultipartFile file, int index, List<Object> params) throws Exception {
this.checkFile(file);
List<List<T>> resultList = new LinkedList<>();
for (int i=0; i<index; i++) {
UploadDataListener<T> uploadDataListener = new UploadDataListener<>();
ExcelReaderBuilder builder = EasyExcelFactory.read(file.getInputStream(), params.get(i).getClass(), uploadDataListener);
builder.sheet(i).doRead();
List<T> list = uploadDataListener.getList();
resultList.add(list);
}
return resultList;
}
/**
* excel
* @param response
* @param dataList
* @param clazz
* @param fileName
* @param sheetNamesheet
* @throws Exception
*/
public <T> void exportExcel(HttpServletResponse response, List<T> dataList, Class<T> clazz, String fileName, String sheetName) throws Exception {
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding(StandardCharsets.UTF_8.name());
fileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.name());
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ExcelTemplateEnum.TEMPLATE_SUFFIX.getDesc());
EasyExcelFactory.write(response.getOutputStream(), clazz).sheet(sheetName).doWrite(dataList);
}
/**
* sheet
* @param response
* @param dataList
* @param clazzMapsheet
* @param fileName
* @param <T>
* @throws Exception
*/
public <T> void exportExcels(HttpServletResponse response, List<List<?>> dataList, Map<Integer, String> clazzMap, String fileName) throws Exception {
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding(StandardCharsets.UTF_8.name());
fileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.name());
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ExcelTemplateEnum.TEMPLATE_SUFFIX.getDesc());
ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).build();
int len = dataList.get(0).size();
for (int i=0; i<len; i++) {
List<?> objects = (List<?>) dataList.get(0).get(i);
Class<?> aClass = objects.get(0).getClass();
WriteSheet writeSheet0 = EasyExcel.writerSheet(i, clazzMap.get(i)).head(aClass).build();
excelWriter.write(objects, writeSheet0);
}
excelWriter.finish();
}
/**
* -sheet
* @param list
* @param object
* @param fileName
* @param templateName
* @throws Exception
*/
public <T> void exportTemplateExcels(HttpServletResponse response, List<T> list, Object object, String fileName, String templateName) throws Exception{
String template = ExcelTemplateEnum.TEMPLATE_PATH.getDesc() + File.separator + templateName + ExcelTemplateEnum.TEMPLATE_SUFFIX.getDesc();
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(template);
FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
ExcelWriter excelWriter = EasyExcelFactory.write(getOutputStream(fileName, response)).withTemplate(inputStream).build();
WriteSheet writeSheet0 = EasyExcelFactory.writerSheet(0).build();
excelWriter.fill(object, fillConfig, writeSheet0);
excelWriter.fill(list, fillConfig, writeSheet0);
excelWriter.finish();
}
/**
* -sheet
* @param list1
* @param list2
* @param object1
* @param object2
* @param fileName
* @param templateName
* @throws Exception
*/
public <T> void exportSheetTemplateExcels(HttpServletResponse response, List<T> list1,List<T> list2, Object object1,Object object2, String fileName, String templateName) throws Exception{
String template = ExcelTemplateEnum.TEMPLATE_PATH.getDesc() + File.separator + templateName + ExcelTemplateEnum.TEMPLATE_SUFFIX.getDesc();
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(template);
FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
ExcelWriter excelWriter = EasyExcelFactory.write(getOutputStream(fileName, response)).withTemplate(inputStream).build();
WriteSheet writeSheet0 = EasyExcelFactory.writerSheet(0).build();
WriteSheet writeSheet1 = EasyExcelFactory.writerSheet(1).build();
excelWriter.fill(object1, fillConfig, writeSheet0);
excelWriter.fill(list1, fillConfig, writeSheet0);
excelWriter.fill(object2, fillConfig, writeSheet1);
excelWriter.fill(list2, fillConfig, writeSheet1);
excelWriter.finish();
}
/**
*
* @param object
* @param templateName
* @param fileName
* @param sheetName sheet [sheet]
* @throws Exception
*/
public void exportTemplateExcel(HttpServletResponse response, Object object, String templateName, String fileName, String sheetName) throws Exception{
String template = ExcelTemplateEnum.TEMPLATE_PATH.getDesc() + File.separator + templateName + ExcelTemplateEnum.TEMPLATE_SUFFIX.getDesc();
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(template);
if (StringUtils.isEmpty(sheetName)) {
EasyExcelFactory.write(getOutputStream(fileName, response)).withTemplate(inputStream).sheet().doFill(object);
} else {
EasyExcelFactory.write(getOutputStream(fileName, response)).withTemplate(inputStream).sheet(sheetName).doFill(object);
}
}
/**
*
* @param list
* @param fileName
* @param templateName
* @param sheetNamesheet [sheet]
* @throws Exception
*/
public <T> void exportTemplateExcelList(HttpServletResponse response, List<T> list, String fileName, String templateName, String sheetName) throws Exception{
log.info("模板名称:{}", templateName);
String template = ExcelTemplateEnum.TEMPLATE_PATH.getDesc() + File.separator + templateName + ExcelTemplateEnum.TEMPLATE_SUFFIX.getDesc();
log.info("模板路径:{}", template);
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(template);
// 全部填充:全部加载到内存中一次填充
if (StringUtils.isEmpty(sheetName)) {
EasyExcelFactory.write(getOutputStream(fileName, response)).withTemplate(inputStream).sheet().doFill(list);
} else {
EasyExcelFactory.write(getOutputStream(fileName, response)).withTemplate(inputStream).sheet(sheetName).doFill(list);
}
}
/**
*
* @param list
* @param fileName
* @param templateName
* @throws Exception
*/
public <T> void exportTemplateExcel2(HttpServletResponse response, List<T> list, String fileName, String templateName) throws Exception{
String template = ExcelTemplateEnum.TEMPLATE_PATH.getDesc() + File.separator + templateName + ExcelTemplateEnum.TEMPLATE_SUFFIX.getDesc();
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(template);
ExcelWriter excelWriter = EasyExcelFactory.write(getOutputStream(fileName, response)).withTemplate(inputStream).build();
WriteSheet writeSheet = EasyExcelFactory.writerSheet().build();
excelWriter.fill(list, writeSheet);
excelWriter.finish();
}
/**
*
* @param fileName
* @param response
* @return
* @throws Exception
*/
private OutputStream getOutputStream(String fileName, HttpServletResponse response) throws Exception {
fileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.name());
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding(StandardCharsets.UTF_8.name());
response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ExcelTemplateEnum.TEMPLATE_SUFFIX.getDesc());
return response.getOutputStream();
}
/**
*
* @param file
*/
private void checkFile(MultipartFile file) {
if (file == null) {
throw new RenException("文件不能为空");
}
String fileName = file.getOriginalFilename();
if (StringUtils.isEmpty(fileName)) {
throw new RenException("文件不能为空");
}
if (!fileName.endsWith(ExcelTemplateEnum.TEMPLATE_SUFFIX.getDesc())
&& !fileName.endsWith(ExcelTemplateEnum.TEMPLATE_SUFFIX_XLS.getDesc())) {
throw new RenException("请上传.xlsx或.xls文件");
}
}
}

@ -0,0 +1,66 @@
package com.glxp.api.util.Excel;
import lombok.Getter;
/**
* @author : zhangsan
* @date : 2023/4/17 11:09
* @modyified By :
*/
@Getter
public enum ExcelTemplateEnum {
/**单sheet导出*/
TEMPLATE_1("1","complex"),
/**模板格式*/
TEMPLATE_SUFFIX("xlsx",".xlsx"),
TEMPLATE_SUFFIX_XLS("xls",".xls"),
TEMPLATE_SUFFIX_DOCX("docx",".docx"),
/**模板路径*/
TEMPLATE_PATH("path","excel"),
;
private final String code;
private final String desc;
ExcelTemplateEnum(String code, String desc) {
this.code = code;
this.desc = desc;
}
/**
* codemsg
*
* @param code
* @return
*/
public static String getMsgByCode(String code) {
if (code == null) {
return null;
}
ExcelTemplateEnum enumList = getByCode(code);
if (enumList == null) {
return null;
}
return enumList.getDesc();
}
public static String getCode(ExcelTemplateEnum enumList) {
if (enumList == null) {
return null;
}
return enumList.getCode();
}
public static ExcelTemplateEnum getByCode(String code) {
for (ExcelTemplateEnum enumList : values()) {
if (enumList.getCode().equals(code)) {
return enumList;
}
}
return null;
}
}

@ -0,0 +1,56 @@
package com.glxp.api.util.Excel.Exception;
/**
* @author : zhangsan
* @date : 2023/4/17 11:21
* @modyified By :
*/
public class RenException extends RuntimeException {
private static final long serialVersionUID = 1L;
private String msg;
private int code = 500;
public RenException(String msg) {
super(msg);
this.msg = msg;
}
public RenException(String msg, Throwable e) {
super(msg, e);
this.msg = msg;
}
public RenException(String msg, int code) {
super(msg);
this.msg = msg;
this.code = code;
}
public RenException(String msg, int code, Throwable e) {
super(msg, e);
this.msg = msg;
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
}

@ -0,0 +1,61 @@
package com.glxp.api.util.Excel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.exception.ExcelDataConvertException;
import com.glxp.api.util.Excel.Exception.RenException;
import java.util.ArrayList;
import java.util.List;
/**
* @author : zhangsan
* @date : 2023/4/17 11:09
* @modyified By :
*/
public class UploadDataListener<T> extends AnalysisEventListener<T> {
/**数据集*/
private final List<T> list = new ArrayList<>();
public List<T> getList(){
return this.list;
}
/**
*
* @param object
* @param analysisContext
*/
@Override
public void invoke(T object, AnalysisContext analysisContext) {
this.list.add(object);
}
/**
*
* @param analysisContext
*/
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
/**
*
* @param exception
* @param context
* @throws Exception
*/
@Override
public void onException(Exception exception, AnalysisContext context) throws Exception {
// 数据解析异常
if (exception instanceof ExcelDataConvertException) {
ExcelDataConvertException excelDataConvertException = (ExcelDataConvertException)exception;
throw new RenException("第" + excelDataConvertException.getRowIndex() + "行" + excelDataConvertException.getColumnIndex() + "列" + "数据解析异常");
}
// 其他异常...
}
}

@ -20,4 +20,10 @@
</where>
</select>
<select id="filterListByRecordKey" resultType="com.glxp.api.entity.inout.IoStatDayEntity">
select *
from io_stat_day
where recordKeyFk = #{recordKey}
</select>
</mapper>
Loading…
Cancel
Save