当前位置:网站首页>循环插入excel某一列,以及多列之和
循环插入excel某一列,以及多列之和
2022-06-12 20:32:00 【鑫品】
package com.xinda.service.impl;
import cn.hutool.core.io.FileUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xinda.entity.BigScreenTop;
import com.xinda.entity.CdwtVo;
import com.xinda.entity.EmsEt;
import com.xinda.mapper.EmsEtMapper;
import com.xinda.service.IEmsEtService;
import com.xinda.service.IEnterpriseAnalysisService;
import com.xinda.utils.TimeUtil;
import com.xinda.utils.UtilsClass;
import net.sf.saxon.functions.Put;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.*;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Service
public class EmsEtServiceImpl extends ServiceImpl<EmsEtMapper, EmsEt> implements IEmsEtService {
@Autowired
private EmsEtMapper emsEtMapper;
@Autowired
private IEnterpriseAnalysisService enterpriseAnalysisService;
@Override
public void importExcell(MultipartFile excelFile, HttpServletRequest request) {
if (excelFile == null || excelFile.getSize() == 0) {
log.error("文件上传错误,重新上传");
}
String filename = excelFile.getOriginalFilename();
if (!(filename.endsWith(".xls") || filename.endsWith(".xlsx"))) {
log.error("文件上传格式错误,请重新上传");
}
List<EmsEt> list = null;
try {
// if (filename.endsWith(".xls")){
// list = readXLS(excelFile);
// }else {
list = readXLSX(excelFile);
// }
} catch (IOException | ParseException e) {
e.printStackTrace();
log.error("文件内容读取失败,请重试");
}
for (EmsEt etList : list) {
String longitude = etList.getLongitude();
String latitude = etList.getLatitude();
String name = etList.getName();
Integer et;
et = emsEtMapper.selectJW(longitude, latitude, name);
if (null != et) {
//修改
etList.setId(et);
emsEtMapper.updateById(etList);
} else {//查不到
emsEtMapper.insert(etList);
}
}
}
@Override
public void download(HttpServletRequest request, HttpServletResponse response) {
//拿到服务器路径
StringBuffer requestURL = request.getRequestURL();
HttpSession session = request.getSession();
ServletContext servletContext = session.getServletContext();
String realPath = servletContext.getRealPath("\\");
String path = (new File(realPath)).getParent();
String uuid = UUID.randomUUID().toString();
String names = "企业信息.xlsx";
// String names = uuid + fileName; //新的文件名
File file = new File(path + "/file/");
if (!file.exists()) { //如果不存在
file.mkdirs(); //创建目录
}
File tempFile = new File(file + names);
try {
//创建文件
//写入到file文件中
List<EmsEt> imsCategories = emsEtMapper.list();
for (EmsEt ss : imsCategories) {
String status = ss.getStatus();
if (null != status && "1".equals(status)) {
status = "已完成";
} else {
status = "未完成";
}
// Double money = ss.getMoney();
// Double balanceofFinanceLease = ss.getBalanceofFinanceLease();
// balanceofFinanceLease= balanceofFinanceLease*10000;
// money=money*10000;
// ss.setMoney(money);
// ss.setBalanceofFinanceLease(balanceofFinanceLease);
ss.setStatus(status);
}
EasyExcel.write(tempFile, EmsEt.class).sheet(names).doWrite(imsCategories);
response.setContentType("application/vnd.ms-excel");
//字符编码
response.setCharacterEncoding("utf-8");
//设置响应头
response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(names, "UTF-8"));
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
response.setHeader("Access-Control-Allow-Headers", "Content-Type");
InputStream inputStream = new FileInputStream(tempFile);
OutputStream os = response.getOutputStream();
byte[] b = new byte[2048];
int length;
while ((length = inputStream.read(b)) > 0) {
os.write(b, 0, length);
}
// os.write(FileUtils.readFileToByteArray(tempFile));
os.flush();
os.close();
inputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public List<EmsEt> timePopupWindow(Integer timeType, String industry, String status) {
List<EmsEt> emsEtList = new ArrayList<>();
String startTime = TimeUtil.getTimeStrByTimeTypeAndOffset(timeType, 0);
String endTime = TimeUtil.getTimeStrByTimeTypeAndOffset(timeType, 0);
List<EmsEt> etList = emsEtMapper.timePopupWindow(industry, status);
if (null != timeType && timeType == 0) {
String startTimes = TimeUtil.getTimeStrByTimeTypeAndOffset(timeType, -1);
String endTimes = TimeUtil.getTimeStrByTimeTypeAndOffset(timeType, -1);
for (EmsEt ls : etList) {
Integer id = ls.getId();
Double totalUsage = enterpriseAnalysisService.getTotalUsage(id, startTimes, endTimes, timeType);
String coxunt = emsEtMapper.coxunt(ls.getId(), startTimes);
ls.setTotalUsage(totalUsage);
ls.setEarlyWarning(coxunt);
emsEtList.add(ls);
}
} else {
for (EmsEt ls : etList) {
Integer id = ls.getId();
Double totalUsage = enterpriseAnalysisService.getTotalUsage(id, startTime, endTime, timeType);
String coxunt = emsEtMapper.coxunt(ls.getId(), startTime);
ls.setTotalUsage(totalUsage);
ls.setEarlyWarning(coxunt);
emsEtList.add(ls);
}
}
return emsEtList;
}
@Override
public List<BigScreenTop> listActivities(String name, String address) {
return emsEtMapper.listActivities(name, address);
}
@Override
public Object test(HttpServletRequest request) {
List<CdwtVo> sele = emsEtMapper.sele();
emsEtMapper.INSTORaLL(sele);
return sele;
}
/* //查入多列之和的全部数据
@Override
public Object test(HttpServletRequest request) {
// Map<Object, Object> map = AllList();
TreeMap<Object, Object> map2 = rowVla(2);
TreeMap<Object, Object> map3 = rowVla(3);
TreeMap<Object, Object> map4 = rowVla(4);
ArrayList<Object> objects = new ArrayList<>();
//Set<Map.Entry<Object, Object>> entries2 = map2.entrySet();//此行可省略,直接将map.entrySet()写在for-each循环的条件中
//Set<Map.Entry<Object, Object>> entries3 = map3.entrySet();//此行可省略,直接将map.entrySet()写在for-each循环的条件中
// Set<Map.Entry<Object, Object>> entries4 = map4.entrySet();//此行可省略,直接将map.entrySet()写在for-each循环的条件中
map2.forEach((key, value) -> {
CdwtVo vo = new CdwtVo();
BigDecimal map2Value = new BigDecimal(String.valueOf(map2.get(key)));
BigDecimal map3Value = new BigDecimal(String.valueOf(map3.get(key)));
BigDecimal map4Value = new BigDecimal(String.valueOf(map4.get(key)));
String s = key.toString();
String substring = s.substring(0, 10);
String replace = substring.replace("-", "/");
vo.setDataTime(replace);
String s1 = String.valueOf(map2Value.add(map3Value).add(map4Value));
vo.setDataValue(s1);
vo.setMsId("1009310");
emsEtMapper.insert(replace,s1);
//System.out.println("包含" + entry.getKey() + "+" + entry.getValue());
objects.add(vo);
});
return objects;
}
*/
private Map<String, BigDecimal> sumValueByTime(Map<Object, Object> list, String timeType) {
Map<String, BigDecimal> result = new LinkedHashMap<String, BigDecimal>();//result size = 0 key = 2021-01 value = 998
int subLength = getSubLength(timeType);
//遍历集合进行加法操作
list.forEach((key, value) -> {//key = 2021-01 value = 998
String resultKey = String.valueOf(key).substring(0, subLength);
BigDecimal resultValue = result.get(resultKey) == null ? BigDecimal.ZERO : result.get(resultKey);
resultValue = resultValue.add(new BigDecimal(String.valueOf(value)));
result.put(resultKey, resultValue);
});
return result;
}
private int getSubLength(String timeType) {
if ("0".equals(timeType))
return 10;
else if ("1".equals(timeType))
return 7;
else if ("".equals(timeType))
return 4;
else
return 0;
}
/* //插入每一列的数据
@Override
public Object test(HttpServletRequest request) {
// Map<Object, Object> map = AllList();
TreeMap<Object, Object> map = rowVla(3);
ArrayList<Object> objects = new ArrayList<>();
Set<Map.Entry<Object, Object>> entries = map.entrySet();//此行可省略,直接将map.entrySet()写在for-each循环的条件中
for(Map.Entry<Object, Object> entry:entries){
CdwtVo vo=new CdwtVo();
String s = entry.getKey().toString();
String substring = s.substring(0,10);
String replace= substring.replace("-", "/");//excel导入处理好的时间
//continue;
//CdwtVo cdwt = emsEtMapper.cdwt();//2021/10/13
String dataTime = "2021/09/30";
int c= replace.compareTo(dataTime);
boolean b = replace.compareTo(dataTime)>=0;
if(b){
vo.setDataTime(replace);
vo.setDataValue(entry.getValue().toString());
vo.setMsId("HD_HD72_350_P1");
System.out.println("包含"+entry.getKey()+"+"+entry.getValue());
}
objects.add(vo);
}
return objects;
}
*/
//list 去重
public static List ridRepeat1(List<Object> list) {
List<Object> newList = new ArrayList<>();
list.forEach(str -> {
if (!newList.contains(str)) {
newList.add(str);
}
});
return newList;
}
public static <T> List<T> merge(List<T> list1, List<T> list2) {
List<T> list = new ArrayList<>();
Stream.of(list1, list2).forEach(list::addAll);
return list;
}
private static TreeMap<Object, Object> rowVla(int row) {
String filepath = "C:\\Users\\Administrator\\Desktop\\附件一:用水21-22.xlsx";
//InputStream inputStream = file.getInputStream();
// Workbook Workbook = new XSSFWorkbook(inputStream);
// String fileName = file.getOriginalFilename();
// 2.应用HUtool ExcelUtil获取ExcelReader指定输入流和sheet
// ExcelReader excelReader = ExcelUtil.getReader(inputStream, "导入材料清单");
// 可以加上表头验证
// 3.读取第二行到最后一行数据
ExcelReader excelReader = ExcelUtil.getReader(FileUtil.file(filepath));
List<List<Object>> read = excelReader.read(2, excelReader.getRowCount());//所有
// List<Object> ss= excelReader.readRow(0); //一行
TreeMap<Object, Object> map = new TreeMap<>();
for (List<Object> objects : read) {
map.put(objects.get(0), objects.get(row));
}
// ExcelReader reader0 = ExcelUtil.getReader(ResourceUtil.getStream(inputStream.toString()));
//通过sheet编号获取
//ExcelReader reader1 = ExcelUtil.getReader(FileUtil.file(filepath), 0);
//通过sheet名获取
// ExcelReader reader2 = ExcelUtil.getReader(FileUtil.file(filepath), "101");
return map;
}
/**
* 文件上传
*
* @param file
* @param request
* @return
*/
@Override
public JSONObject uploadFile(MultipartFile file, HttpServletRequest request) throws Exception {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
MultipartFile files = entity.getValue();// 获取上传文件对象
ImportParams params = new ImportParams();
params.setTitleRows(2);
params.setHeadRows(1);
params.setNeedSave(true);
List<Object> list = ExcelImportUtil.importExcel(file.getInputStream(), null, params);
}
//获取文件名称
String fileName = file.getOriginalFilename();
//获取文件存放路径
//路径
//String path = request.getSession().getServletContext().getRealPath("").concat("/uploadFile");
//服务器项目路径
String path = (new File(request.getSession().getServletContext().getRealPath("\\"))).getParent() + "\\file";
//本地路径
//String path=this.getClass().getResource("/").getPath().replaceFirst("/", ""); +/file
File files = new File(path); //判断路径
//将上传的文件存储到file目录中
// String path = getUploadPath(fileName,request);
//上传文件
File targetFile = new File(files, fileName);
if (!targetFile.exists()) {
targetFile.mkdirs();
}
//保存
try {
file.transferTo(targetFile);
} catch (Exception e) {
e.printStackTrace();
return new JSONObject(fileName);
}
//logger.info(fileName+"文件上传成功");
JSONObject jsonObject = new JSONObject();
jsonObject.put("key", "true");
jsonObject.put("name", fileName);
jsonObject.put("path", path + "\\" + fileName);
return jsonObject;
}
public static boolean isEmptyCell(Cell cell) {
if (cell == null || cell.getCellType().equals(CellType.BLANK)) {
return true;
}
return false;
}
public List<EmsEt> readXLSX(MultipartFile file) throws IOException, ParseException {
ArrayList<EmsEt> list = new ArrayList<>();
InputStream inputStream = file.getInputStream();
Workbook Workbook = new XSSFWorkbook(inputStream);
Sheet sheet = Workbook.getSheetAt(0);
int lastRowNum = sheet.getLastRowNum();
for (int rowNum = 1; rowNum <= lastRowNum; rowNum++) {
Row row = sheet.getRow(rowNum);
if (row != null) {
EmsEt et = new EmsEt();
//使用了getStringCellValue()方法来获取值,POI会判断单元格的类型,如果非字符串类型就会抛出上面的异常。
//所以先使用setCellType()方法先将该单元格的类型设置为STRING
//然后poi会根据字符串读取它
DataFormatter dataFormatter = new DataFormatter();
String value1 = dataFormatter.formatCellValue(row.getCell(1));
String value2 = dataFormatter.formatCellValue(row.getCell(2));
String value3 = dataFormatter.formatCellValue(row.getCell(3));
String value4 = dataFormatter.formatCellValue(row.getCell(4));
String value5 = dataFormatter.formatCellValue(row.getCell(5));
row.getCell(5).setCellType(CellType.STRING);
String value6 = dataFormatter.formatCellValue(row.getCell(6));
String value7 = dataFormatter.formatCellValue(row.getCell(7));
String value8 = dataFormatter.formatCellValue(row.getCell(8));
String value9 = dataFormatter.formatCellValue(row.getCell(9));
String value10 = dataFormatter.formatCellValue(row.getCell(10));
String value11 = dataFormatter.formatCellValue(row.getCell(11));
String value12 = dataFormatter.formatCellValue(row.getCell(12));
String value13 = dataFormatter.formatCellValue(row.getCell(13));
if (!row.getCell(0).getStringCellValue().isEmpty()) {
et.setName(row.getCell(0).getStringCellValue());
} else {
et.setName(null);
}
if (!value1.isEmpty()) {
et.setLongitude(value1);
} else {
et.setLongitude(null);
}
if (!value2.isEmpty()) {
et.setLatitude(value2);
} else {
et.setLatitude(null);
}
if (!value3.isEmpty()) {
if (value3.equals("已完成")) {
et.setStatus("1");
} else {
et.setStatus("2");
}
// et.setStatus(row.getCell(3).getStringCellValue());
} else {
et.setStatus(null);
}
if (!value4.isEmpty()) {
et.setMoney(Double.valueOf(value4));
} else {
et.setMoney(null);
}
if (!row.getCell(5).getStringCellValue().isEmpty()) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:MM:SS");
Date javaDate = HSSFDateUtil.getJavaDate(Double.valueOf(row.getCell(5).getStringCellValue()));
et.setContractStartTime(javaDate);
} else {
et.setContractStartTime(null);
}
if (!value6.isEmpty()) {
Integer aDouble = Double.valueOf(String.valueOf(value6)).intValue();
et.setContractTerm(aDouble);
} else {
et.setContractTerm(null);
}
if (!value7.isEmpty()) {
et.setAddress(value7);
} else {
et.setAddress(null);
}
if (!value8.isEmpty()) {
et.setProjectContent(value8);
} else {
et.setProjectContent(null);
}
if (!value9.isEmpty()) {
et.setBalanceofFinanceLease(Double.valueOf(value9));
} else {
et.setBalanceofFinanceLease(null);
}
if (!value10.isEmpty()) {
et.setIndustryInvolved(value10);
} else {
et.setIndustryInvolved(null);
}
if (!value11.isEmpty()) {
et.setAccountManager(value11);
} else {
et.setAccountManager(null);
}
if (!value12.isEmpty()) {
Integer aDouble = Double.valueOf(String.valueOf(value12)).intValue();
et.setPhotovoltaicInstalledCapacity(aDouble);
} else {
et.setPhotovoltaicInstalledCapacity(null);
}
if (!value13.isEmpty()) {
Integer aDouble = Double.valueOf(String.valueOf(value13)).intValue();
et.setEnergyStorageCapacity(aDouble);
} else {
et.setEnergyStorageCapacity(null);
}
Cell cell = row.getCell(14);
if (cell == null)
log.error("第" + rowNum + "行,第14列数据为null");
//
list.add(et);
}
}
return list;
}
}
package com.xinda.service; import cn.hutool.json.JSONObject; import com.baomidou.mybatisplus.extension.service.IService; import com.xinda.entity.BigScreenTop; import com.xinda.entity.CdwtVo; import com.xinda.entity.EmsEt; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.util.List; import java.util.Map; public interface IEmsEtService extends IService<EmsEt> { void importExcell(MultipartFile excelFile, HttpServletRequest request); Object test( HttpServletRequest request); JSONObject uploadFile(MultipartFile file, HttpServletRequest request) throws Exception; void download( HttpServletRequest request, HttpServletResponse response); }
package com.xinda.controller; import java.io.File; import java.math.BigDecimal; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import cn.hutool.json.JSONObject; import com.xinda.entity.BigScreenTop; import com.xinda.entity.EmsEtTree; import com.xinda.service.IEmsEtService; import com.xinda.vo.QOQVO; import org.apache.poi.ss.formula.functions.T; import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.util.oConvertUtils; import com.xinda.entity.EmsEt; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.extern.slf4j.Slf4j; import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.def.NormalExcelConstants; import org.jeecgframework.poi.excel.entity.ExportParams; import org.jeecgframework.poi.excel.entity.ImportParams; import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; import org.jeecg.common.system.base.controller.JeecgController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; import com.alibaba.fastjson.JSON; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.jeecg.common.aspect.annotation.AutoLog; import static java.math.BigDecimal.ROUND_HALF_UP; /** * @Description: 企业表 * @Author: jeecg-boot * @Date: 2022-05-18 * @Version: V1.0 */ @Api(tags="企业表") @RestController @RequestMapping("/xinda/emsEt") @Slf4j public class EmsEtController extends JeecgController<EmsEt, IEmsEtService> { @Autowired private IEmsEtService emsEtService; /** * 导出excel * * @param request * @param emsEt */ @RequestMapping(value = "/exportXls") public ModelAndView exportXls(HttpServletRequest request, EmsEt emsEt) { return super.exportXls(request, emsEt, EmsEt.class, "企业表"); } /** * 通过excel导入数据 * * @param request * @param response * @return */ @RequestMapping(value = "/importExcel", method = RequestMethod.POST) public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) { return super.importExcel(request, response, EmsEt.class); } @AutoLog(value = "上传") @ApiOperation("上传") @PostMapping(value = "/importExcell",consumes = {MediaType.MULTIPART_FORM_DATA_VALUE}) public Result<?> importExcell(@RequestParam("excelFile")MultipartFile multipartFile, HttpServletRequest request){ emsEtService.importExcell(multipartFile,request); return Result.OK("导入成功"); } @AutoLog(value = "测试") @ApiOperation("测试") @PostMapping(value = "/test") public Result<?> test(HttpServletRequest request){ Object test = emsEtService.test(request); return Result.OK(test); } @AutoLog(value = "上传3") @ApiOperation(value="上传3", notes="上传3") @PostMapping(value = "/upload",consumes = {MediaType.MULTIPART_FORM_DATA_VALUE}) //@ResponseBody public JSONObject upload(@RequestParam(value = "file") MultipartFile file, HttpServletRequest request) throws Exception { //fileOperation = new FileOperatzion(); //返回文件后的文件路径 return emsEtService.uploadFile(file,request); } @AutoLog(value = "导出下载") @ApiOperation(value="导出下载", notes="导出下载") @GetMapping(value = "/downloadOut",produces = {"application/vnd.ms-excel;charset=UTF-8"}) public void downloadOut( HttpServletRequest request,HttpServletResponse response) { emsEtService.download(request,response); } @AutoLog(value = "路径截取") @ApiOperation(value="路径截取", notes="路径截取") @GetMapping(value = "/put") public Result<?> put(HttpServletRequest request,HttpServletResponse response) { StringBuffer requestURL = request.getRequestURL(); String substring = requestURL.substring(0, requestURL.length() - 3); String b = "downloadOut"; substring = substring + b; return Result.OK(substring); } }
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>jeecg-boot-parent</artifactId> <groupId>org.jeecgframework.boot</groupId> <version>2.4.2</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>ems-module-api</artifactId> <properties> <revision>3.1.0</revision> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.jeecgframework.boot</groupId> <artifactId>jeecg-boot-base-core</artifactId> <exclusions> <exclusion> <artifactId>poi-ooxml-schemas</artifactId> <groupId>org.apache.poi</groupId> </exclusion> <exclusion> <artifactId>poi-ooxml</artifactId> <groupId>org.apache.poi</groupId> </exclusion> <exclusion> <artifactId>poi</artifactId> <groupId>org.apache.poi</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>${revision}</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel-core</artifactId> <version>${revision}</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel-support</artifactId> <version>${revision}</version> </dependency> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.68</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.68</version> <scope>compile</scope> </dependency> </dependencies> </project>
边栏推荐
- sklearn中随机森林RandomForestClassifier的参数含义
- Let Google browser fofa plug-in come alive
- Nexus3 build local warehouse
- Illustrator tutorial, how to recolor artwork in illustrator?
- Double carbon in every direction: green demand and competition focus in the calculation from the east to the West
- Go memory escape analysis
- 1. Getting to know R
- 阿里前辈给我推荐的软件测试人员必读书籍(附电子书),让我受益匪浅...
- (11) Image frequency domain filtering with OpenCV
- How to download putty using alicloud image?
猜你喜欢

【生成对抗网络学习 其三】BiGAN论文阅读笔记及其原理理解

What is the difference between union and union all

Compilation of programs

测试人如何规划自己的未来?才能实现入行2年达到25k?

JSP中的监听器

Double carbon in every direction: green demand and competition focus in the calculation from the east to the West

同时做测试,别人已经年薪20w起,为什么你还在为达到月薪10k而努力?

When will the index fail

Listener in JSP

At the same time, do the test. Others have been paid 20W a year. Why are you still working hard to reach 10K a month?
随机推荐
What is the difference between union and union all
sklearn中随机森林RandomForestClassifier的参数含义
If you master these skills, you can also write a high score resume in the eyes of HR
DFT learning notes
Properties to YML
JS中如何实现重载
函数的了解
作用域和作用域链
new做了哪几件事
Why my order by create_ Time ASC becomes order by ASC
Introduction to the characteristics of building a balancer decentralized exchange market capitalization robot
Minio client (MC command) implements data migration
Kyma application connectivity feature introduction
同时做测试,别人已经年薪20w起,为什么你还在为达到月薪10k而努力?
2022年春招,测试工程师全套面试攻略,一篇吃透全部技术栈(全是干货)
more-copy. JS specifies that the file template is generated to the specified file directory
Before job hopping, Jin San made up the interview questions. Jin San successfully landed at Tencent and got a 30K test offer
Wall Street cheat sheet
Deploy etcd cluster in static pod mode
Index optimization principle