当前位置:网站首页>Circularly insert one excel column and the sum of multiple columns
Circularly insert one excel column and the sum of multiple columns
2022-06-12 20:34:00 【Xinpin】
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(" File upload error , Upload again ");
}
String filename = excelFile.getOriginalFilename();
if (!(filename.endsWith(".xls") || filename.endsWith(".xlsx"))) {
log.error(" File upload format error , Please upload again ");
}
List<EmsEt> list = null;
try {
// if (filename.endsWith(".xls")){
// list = readXLS(excelFile);
// }else {
list = readXLSX(excelFile);
// }
} catch (IOException | ParseException e) {
e.printStackTrace();
log.error(" File content read failed , Please try again ");
}
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) {
// modify
etList.setId(et);
emsEtMapper.updateById(etList);
} else {// We can't find it
emsEtMapper.insert(etList);
}
}
}
@Override
public void download(HttpServletRequest request, HttpServletResponse response) {
// Get the server path
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 = " Enterprise information .xlsx";
// String names = uuid + fileName; // New file name
File file = new File(path + "/file/");
if (!file.exists()) { // If it doesn't exist
file.mkdirs(); // Create directory
}
File tempFile = new File(file + names);
try {
// create a file
// Write to file In file
List<EmsEt> imsCategories = emsEtMapper.list();
for (EmsEt ss : imsCategories) {
String status = ss.getStatus();
if (null != status && "1".equals(status)) {
status = " Completed ";
} else {
status = " Hang in the air ";
}
// 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");
// Character encoding
response.setCharacterEncoding("utf-8");
// Set the response header
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;
}
/* // Check all the data of the sum of multiple columns
@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();// This line can be omitted , Direct will map.entrySet() Written in for-each In the condition of a cycle
//Set<Map.Entry<Object, Object>> entries3 = map3.entrySet();// This line can be omitted , Direct will map.entrySet() Written in for-each In the condition of a cycle
// Set<Map.Entry<Object, Object>> entries4 = map4.entrySet();// This line can be omitted , Direct will map.entrySet() Written in for-each In the condition of a cycle
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(" contain " + 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);
// Traverse the set to add
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;
}
/* // Insert data for each column
@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();// This line can be omitted , Direct will map.entrySet() Written in for-each In the condition of a cycle
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 Import the processed time
//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(" contain "+entry.getKey()+"+"+entry.getValue());
}
objects.add(vo);
}
return objects;
}
*/
//list duplicate removal
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\\ Annex 1 : Water 21-22.xlsx";
//InputStream inputStream = file.getInputStream();
// Workbook Workbook = new XSSFWorkbook(inputStream);
// String fileName = file.getOriginalFilename();
// 2. application HUtool ExcelUtil obtain ExcelReader Specify input stream and sheet
// ExcelReader excelReader = ExcelUtil.getReader(inputStream, " Import bill of materials ");
// You can add header verification
// 3. Read the data from the second row to the last row
ExcelReader excelReader = ExcelUtil.getReader(FileUtil.file(filepath));
List<List<Object>> read = excelReader.read(2, excelReader.getRowCount());// all
// List<Object> ss= excelReader.readRow(0); // a line
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()));
// adopt sheet Number acquisition
//ExcelReader reader1 = ExcelUtil.getReader(FileUtil.file(filepath), 0);
// adopt sheet Name acquisition
// ExcelReader reader2 = ExcelUtil.getReader(FileUtil.file(filepath), "101");
return map;
}
/**
* Upload files
*
* @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();// Get the upload file object
ImportParams params = new ImportParams();
params.setTitleRows(2);
params.setHeadRows(1);
params.setNeedSave(true);
List<Object> list = ExcelImportUtil.importExcel(file.getInputStream(), null, params);
}
// Get the file name
String fileName = file.getOriginalFilename();
// Get the file storage path
// route
//String path = request.getSession().getServletContext().getRealPath("").concat("/uploadFile");
// Server project path
String path = (new File(request.getSession().getServletContext().getRealPath("\\"))).getParent() + "\\file";
// The local path
//String path=this.getClass().getResource("/").getPath().replaceFirst("/", ""); +/file
File files = new File(path); // Judge the path
// Store the uploaded file in file Directory
// String path = getUploadPath(fileName,request);
// Upload files
File targetFile = new File(files, fileName);
if (!targetFile.exists()) {
targetFile.mkdirs();
}
// preservation
try {
file.transferTo(targetFile);
} catch (Exception e) {
e.printStackTrace();
return new JSONObject(fileName);
}
//logger.info(fileName+" File upload succeeded ");
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();
// Used getStringCellValue() Method to get the value ,POI Will determine the type of cell , If it is not a string type, the above exception will be thrown .
// So first use setCellType() Method first sets the type of the cell to STRING
// then poi It will be read from the string
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(" Completed ")) {
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(" The first " + rowNum + " That's ok , The first 14 Column data is 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: Enterprise table * @Author: jeecg-boot * @Date: 2022-05-18 * @Version: V1.0 */ @Api(tags=" Enterprise table ") @RestController @RequestMapping("/xinda/emsEt") @Slf4j public class EmsEtController extends JeecgController<EmsEt, IEmsEtService> { @Autowired private IEmsEtService emsEtService; /** * export excel * * @param request * @param emsEt */ @RequestMapping(value = "/exportXls") public ModelAndView exportXls(HttpServletRequest request, EmsEt emsEt) { return super.exportXls(request, emsEt, EmsEt.class, " Enterprise table "); } /** * adopt excel Import data * * @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 = " Upload ") @ApiOperation(" Upload ") @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(" Successful import "); } @AutoLog(value = " test ") @ApiOperation(" test ") @PostMapping(value = "/test") public Result<?> test(HttpServletRequest request){ Object test = emsEtService.test(request); return Result.OK(test); } @AutoLog(value = " Upload 3") @ApiOperation(value=" Upload 3", notes=" Upload 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 the file path after the file return emsEtService.uploadFile(file,request); } @AutoLog(value = " Export and download ") @ApiOperation(value=" Export and download ", notes=" Export and download ") @GetMapping(value = "/downloadOut",produces = {"application/vnd.ms-excel;charset=UTF-8"}) public void downloadOut( HttpServletRequest request,HttpServletResponse response) { emsEtService.download(request,response); } @AutoLog(value = " Path interception ") @ApiOperation(value=" Path interception ", notes=" Path interception ") @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>
边栏推荐
- MySQL - the execution order of an SQL statement
- 使用Swagger生成 API 文档(go语言示例)
- sklearn中随机森林RandomForestClassifier的参数含义
- go --- 监控文件变化
- 可测性设计学习笔记
- Let Google browser fofa plug-in come alive
- 机器学习资料汇总
- It has been engaged in the functional test of 10K to the test development of 40W annual salary for 5 years, and spent 7 days sorting out the super comprehensive learning route
- Proxy and reflection
- [untitled]
猜你喜欢

Is it really possible to find a testing job with a monthly income of more than 10000 without a degree and self-study software testing?

What is the difference between union and union all

Zhangqiming, vice director of the United Front Work Department of the CPC Anhui Provincial Committee, led a team to investigate the HoloNet Royal Hefei R & D base

View 的事件分发机制

Properties to YML

6 R factor and judgment Na

解决cvxpy报错The solver GLPK_MI is not installed

3 R complex data types

In 2022, FISCO bcos MVP recognized that the channel was open and invited you to become an open source leader

牛客網:三數之和
随机推荐
没有学历,自学软件测试,找到一份月入过万的测试工作真的有可能吗?
Bsn-ddc basic network introduction, technical features, unique advantages, application scenarios and platform access
MinIO客户端(mc命令)实现数据迁移
What is disk IO?
测试人如何规划自己的未来?才能实现入行2年达到25k?
Installation of xv6 system
Properties to YML
[generation confrontation network learning III] reading notes of Bigan paper and its principle understanding
6 R factor and judgment Na
[leetcode 7 solution] integer inversion
Explain
同时做测试,别人已经年薪20w起,为什么你还在为达到月薪10k而努力?
MySQL Basics
Golang type assertion understanding [go language Bible]
EditText控制从左上角开始
做自媒体视频,友好的新媒体运营必备app分享
(11) Image frequency domain filtering with OpenCV
DFT learning notes
View 的事件分发机制
Proxy and reflection