Excel表格数据导入

先贴上,工具类

import com.xuxueli.poi.excel.annotation.ExcelSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.InputStream; import java.io.OutputStream; import java.net.URLEncoder; import java.util.List; @Component public class MyExcelUtil { /** * 导出Excel文件到磁盘 */ public static void exportToFile(Class clazz, List<?> dataList, HttpServletResponse response){ // workbook XSSFWorkbook workbook = MyExcelExportUtil.exportWorkbook(dataList); OutputStream out = null; try { response.setContentType("APPLICATION/OCTET-STREAM"); // set headers for the response String headerKey = "Content-Disposition"; ExcelSheet excelSheet = (ExcelSheet)clazz.getAnnotation(ExcelSheet.class); String filename = excelSheet.name(); String fileNameWithExt = filename + ".xlsx"; String headerValue = null; headerValue = String.format("attachment; filename=\"%s\"", URLEncoder.encode(fileNameWithExt, "utf-8")); response.setHeader(headerKey, headerValue); out = response.getOutputStream(); // workbook 2 FileOutputStream workbook.write(out); // flush } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } finally { try { if (out!=null) { out.close(); } } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } } } /** * 导入 */ public static List importFromFile(Class clazz, MultipartFile file){ InputStream inputStream =null; try{ inputStream = file.getInputStream(); List objects = MyExcelImportUtil.importExcel(clazz, inputStream); return objects; }catch (Exception e){ e.printStackTrace(); throw new RuntimeException(e); }finally { try { if (inputStream!=null) { inputStream.close(); } } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } } } }

import com.xuxueli.poi.excel.ExcelExportUtil; import com.xuxueli.poi.excel.annotation.ExcelField; import com.xuxueli.poi.excel.annotation.ExcelSheet; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.util.StringUtils; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.Date; import java.util.List; public class MyExcelExportUtil extends ExcelExportUtil { public static XSSFWorkbook exportWorkbook(List<?> dataList) { if (dataList != null && dataList.size() != 0) { Class sheetClass = dataList.get(0).getClass(); ExcelSheet excelSheet = (ExcelSheet) sheetClass.getAnnotation(ExcelSheet.class); String sheetName = dataList.get(0).getClass().getSimpleName(); HSSFColor.HSSFColorPredefined headColor = null; if (excelSheet != null) { if (excelSheet.name() != null && excelSheet.name().trim().length() > 0) { sheetName = excelSheet.name().trim(); } headColor = excelSheet.headColor(); } ArrayList fields = new ArrayList(); if (sheetClass.getDeclaredFields() != null && sheetClass.getDeclaredFields().length > 0) { Field[] workbook = sheetClass.getDeclaredFields(); int sheet = workbook.length; for (int headStyle = 0; headStyle < sheet; ++headStyle) { Field headRow = workbook[headStyle]; ExcelField rowData = (ExcelField) headRow.getAnnotation(ExcelField.class); if (rowData == null) { continue; } String name = rowData.name().trim(); if (StringUtils.isEmpty(name)) { continue; } if (!Modifier.isStatic(headRow.getModifiers())) { fields.add(headRow); } } } if (fields != null && fields.size() != 0) { XSSFWorkbook var19 = new XSSFWorkbook(); Sheet var20 = var19.createSheet(sheetName); CellStyle var21 = null; if (headColor != null) { var21 = var19.createCellStyle(); var21.setFillForegroundColor(headColor.getIndex()); var21.setFillPattern(FillPatternType.SOLID_FOREGROUND); var21.setFillBackgroundColor(headColor.getIndex()); } Row var22 = var20.createRow(0); int dataIndex; for (dataIndex = 0; dataIndex < fields.size(); ++dataIndex) { Field rowIndex = (Field) fields.get(dataIndex); ExcelField rowData = (ExcelField) rowIndex.getAnnotation(ExcelField.class); if (rowData == null) { continue; } String name = rowData.name().trim(); if (StringUtils.isEmpty(name)) { continue; } String rowX = rowData != null && rowData.name() != null && rowData.name().trim().length() > 0 ? rowData.name() : rowIndex.getName(); Cell i = var22.createCell(dataIndex, 1); if (var21 != null) { i.setCellStyle(var21); } i.setCellValue(String.valueOf(rowX)); } for (dataIndex = 0; dataIndex < dataList.size(); ++dataIndex) { int var23 = dataIndex + 1; Object var24 = dataList.get(dataIndex); Row var25 = var20.createRow(var23); for (int var26 = 0; var26 < fields.size(); ++var26) { Field field = (Field) fields.get(var26); ExcelField rowData = (ExcelField) field.getAnnotation(ExcelField.class); if (rowData == null) { continue; } String name = rowData.name().trim(); if (StringUtils.isEmpty(name)) { continue; } try { field.setAccessible(true); Object e = field.get(var24); Cell cellX = var25.createCell(var26, 1); if (e == null) { cellX.setCellValue(""); } else { Class<?> aClass = e.getClass(); Date date = new Date(); if (aClass == date.getClass()) { cellX.setCellValue(DateUtil.formatTimestamp((Date) e)); } else if(aClass.isEnum()){ try { Method getDesc = aClass.getMethod("getDesc"); Object invoke = getDesc.invoke(e); cellX.setCellValue(String.valueOf(invoke)); } catch (Exception e1) { cellX.setCellValue(""); } } else { cellX.setCellValue(String.valueOf(e)); } } } catch (IllegalAccessException var18) { throw new RuntimeException(var18); } } } return var19; } else { throw new RuntimeException(">>>>>>>>>>> xxl-excel error, data field can not be empty."); } } else { throw new RuntimeException(">>>>>>>>>>> xxl-excel error, data can not be empty."); } } }

import com.xuxueli.poi.excel.ExcelImportUtil; import com.xuxueli.poi.excel.annotation.ExcelField; import com.xuxueli.poi.excel.annotation.ExcelSheet; import com.xuxueli.poi.excel.util.FieldReflectionUtil; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.usermodel.*; import org.springframework.util.StringUtils; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class MyExcelImportUtil extends ExcelImportUtil { public static List<Object> importExcel(Class<?> sheetClass, Workbook workbook) { try { ExcelSheet excelSheet = (ExcelSheet) sheetClass.getAnnotation(ExcelSheet.class); String sheetName = excelSheet != null && excelSheet.name() != null && excelSheet.name().trim().length() > 0 ? excelSheet.name().trim() : sheetClass.getSimpleName(); List<Field> fields = new ArrayList(); int rowIndex; if (sheetClass.getDeclaredFields() != null && sheetClass.getDeclaredFields().length > 0) { Field[] var5 = sheetClass.getDeclaredFields(); int var6 = var5.length; for (rowIndex = 0; rowIndex < var6; ++rowIndex) { Field field = var5[rowIndex]; if (!Modifier.isStatic(field.getModifiers())) { fields.add(field); } } } if (fields != null && fields.size() != 0) { Sheet sheet = workbook.getSheet(sheetName); Iterator<Row> sheetIterator = sheet.rowIterator(); rowIndex = 0; ArrayList dataList; ArrayList headList = new ArrayList(); for1: for (dataList = new ArrayList(); sheetIterator.hasNext(); ++rowIndex) { Row rowX = (Row) sheetIterator.next(); if (rowIndex == 0) { Iterator<Cell> cellIterator = rowX.cellIterator(); while (cellIterator.hasNext()) { Cell cell = cellIterator.next(); //cell.setCellType(CellType.STRING); String stringCellValue = cell.getStringCellValue(); if (!StringUtils.isEmpty(stringCellValue)) { headList.add(stringCellValue); } } } if (rowIndex > 0) { Object rowObj = sheetClass.newInstance(); for2: for (int i = 0; i < fields.size(); ++i) { Field field = (Field) fields.get(i); ExcelField excelField = field.getAnnotation(ExcelField.class); if (excelField == null) { continue; } String name = excelField.name().trim(); if (StringUtils.isEmpty(name)) { continue; } int index = headList.indexOf(name); if (index < 0) { continue; } Cell cell = rowX.getCell(index); if (cell != null) { try { cell.setCellType(CellType.STRING); String fieldValueStr = cell.getStringCellValue(); if (i == 0 && StringUtils.isEmpty(fieldValueStr)) { break for1; }//当前行第一列为空跳出循环for1 Object fieldValue = FieldReflectionUtil.parseValue(field, fieldValueStr); field.setAccessible(true); field.set(rowObj, fieldValue); } catch (Exception ex) { field.setAccessible(true); field.set(rowObj, null); } } else { if (i == 0) { break for1; }//当前行第一列为空跳出循环for1 } } dataList.add(rowObj); } } return dataList; } else { throw new RuntimeException(">>>>>>>>>>> xxl-excel error, data field can not be empty."); } } catch (Exception var15) { throw new RuntimeException(var15); } } public static List<Object> importExcel(Class<?> sheetClass, InputStream inputStream) { try { Workbook workbook = WorkbookFactory.create(inputStream); List<Object> dataList = importExcel(sheetClass, workbook); return dataList; } catch (IOException var4) { throw new RuntimeException(var4); } catch (InvalidFormatException var5) { throw new RuntimeException(var5); } } }

定义实体类接收表格数据,注意列名要对应

@Data @ExcelSheet(name = "Sheet1") public class CompetitionUserEntity implements Serializable { @ExcelField(name = "电话") private String loginId; @ExcelField(name = "姓名") private String academicName; @ExcelField(name = "年级") private String grade; @ExcelField(name = "学校") private String school; @ExcelField(name = "省份") private String belongProvince; @ExcelField(name = "城市") private String belongCity; @ExcelField(name = "区县") private String district; }

调用:

Postman 调用:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Java)

面试结束复盘查漏补缺

每次面试都是检验自己知识与技术实力的一次机会,面试结束后建议大家及时总结复盘,查漏补缺,然后有针对性地进行学习,既能提高下一场面试的成功概率,还能增加自己的技术知识栈储备,可谓是一举两得。

以下最新总结的阿里P6资深Java必考题范围和答案,包含最全MySQL、Redis、Java并发编程等等面试题和答案,用于参考~

重要的事说三遍,关注+关注+关注!

历经30天,说说我的支付宝4面+美团4面+拼多多四面,侥幸全获Offer

image.png

更多笔记分享

历经30天,说说我的支付宝4面+美团4面+拼多多四面,侥幸全获Offer

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!**

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值