POI实现对excel文件的读取操作
1,将导入的excel文件放入start静态文件中,其excel字段就是新增页面字段,顺序必须一致

创建同用工具类
| package com.mashibing.util; |
| |
| import org.apache.poi.ss.usermodel.Cell; |
| import org.apache.poi.ss.usermodel.Row; |
| import org.apache.poi.ss.usermodel.Sheet; |
| import org.apache.poi.xssf.usermodel.XSSFWorkbook; |
| import org.springframework.cglib.beans.BeanMap; |
| |
| import java.io.FileInputStream; |
| import java.util.ArrayList; |
| import java.util.HashMap; |
| import java.util.List; |
| import java.util.Map; |
| |
| public class ExcelUtil { |
| |
| |
| |
| |
| |
| |
| |
| public static <T> List<T> readExcel(FileInputStream stream,Class<T> clazz) throws Exception { |
| List<T> result = new ArrayList<>(); |
| |
| XSSFWorkbook workbook = new XSSFWorkbook(stream); |
| |
| Sheet sheet = workbook.getSheetAt(0); |
| |
| int rowNum = sheet.getPhysicalNumberOfRows(); |
| Row row = sheet.getRow(0); |
| |
| List<String> key = new ArrayList<>(); |
| |
| for (Cell cell : row) { |
| cell.setCellType(Cell.CELL_TYPE_STRING); |
| key.add(cell.getStringCellValue()); |
| } |
| |
| for(int i = 2;i<rowNum;i++){ |
| |
| row = sheet.getRow(i); |
| if(row!=null){ |
| |
| Map<String,String> excelMap = new HashMap<>(); |
| |
| int j = 0; |
| |
| for (Cell cell : row) { |
| if(cell!=null){ |
| |
| cell.setCellType(Cell.CELL_TYPE_STRING); |
| |
| String value = cell.getStringCellValue(); |
| if(value!=null&&!value.equals("")){ |
| |
| excelMap.put(key.get(j),value); |
| j++; |
| } |
| } |
| } |
| |
| T t = clazz.newInstance(); |
| |
| |
| |
| BeanMap beanMap = BeanMap.create(t); |
| beanMap.putAll(excelMap); |
| result.add(t); |
| } |
| } |
| return result; |
| } |
| } |
编写Controller层
| @PostMapping("/uploadExcel") |
| public R uploadExcel(MultipartFile file, String company) { |
| Integer result = null; |
| System.out.println("uploadExcel"); |
| if (file != null && file.getSize() > 0) { |
| try { |
| |
| |
| List<ZhCustomer> customers = ExcelUtil.readExcel((FileInputStream) file.getInputStream(), ZhCustomer.class); |
| |
| result = zhCustomerService.insertAll(customers,company); |
| for (ZhCustomer customer : customers) { |
| System.out.println(customer); |
| } |
| } catch (Exception e) { |
| e.printStackTrace(); |
| } |
| } |
| return new R(result); |
| } |
对Impl进行设计
| @Override |
| public Integer insertAll(List<ZhCustomer> customers, String company) { |
| Integer result = null; |
| if (customers.size()>0){ |
| for (ZhCustomer customer : customers) { |
| customer.setCompany(company); |
| result = zhCustomerMapper.insert(customer); |
| } |
| } |
| return result; |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人