声明:博客代码只是实际项目的一部分,项目是前后端分离的,这篇博客中将记录如何使用工具类中提供的解析excel表格数据,并使用postman测试上传excel表的接口。

在项目pom.xml文件中添加依赖(版本自选,注意不同的版本有可能会抱错,需根据自己的项目导入合适的版本):

<!-- 解析excel --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.0.1</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.0.1</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.0.1</version></dependency>

解析excel表的工具类

我使用该工具类来获取表格数据,并将表格数据创建实体对象(根据实际项目需要改动代码)

public class ParseExcelUtil {public static Workbook getWorkbook(InputStream inputStream,String fileName) throws Exception{Workbook workbook = null;String fileType = fileName.substring(fileName.lastIndexOf("."));// 推荐使用poi-ooxml中的WorkbookFactory.create(is)来创建Workbook,// 因为HSSFWorkbook和XSSFWorkbook都实现了Workbook接口(可以解决以下报错问题)workbook = WorkbookFactory.create(inputStream);/*我使用以下方法,postman测试接口时会报错(excel版本问题)if(".xls".equals(fileType)){workbook = new HSSFWorkbook(inputStream);}else if(".xlsx".equals(fileType)){workbook = new XSSFWorkbook(inputStream);}else {throw new Exception("请上传文件!");}*/return workbook;}public static List<Birth> getListByParseExcel(Workbook workbook){List<Birth> birthList = new ArrayList<>();try {//获取第一个sheetSheet sheet = workbook.getSheetAt(0);//第0行是表明,忽略,从第二行开始读取for(int rowNum = 1; rowNum <= sheet.getLastRowNum(); rowNum++){//JSONObject object = new JSONObject();Birth birth = new Birth();Row row = sheet.getRow(rowNum);Cell cell1 = row.getCell(0);Cell cell2 = row.getCell(1);//先将数字类型的值转化为文本类型,然后再进行读取DataFormatter dataFormatter = new DataFormatter();String phoneString = dataFormatter.formatCellValue(cell1);String idCardString = dataFormatter.formatCellValue(cell2);birth.setPhone(phoneString);birth.setIdcard(idCardString);birthList.add(birth);}}finally {IOUtils.closeQuietly(workbook);}return birthList;}
}

entity文件夹下的实体类Birth.java:

public class Birth implements Serializable {private String phone;private String idcard;private static final long serialVersionUID = 1L;public Birth(String phone, String idcard) {this.phone = phone;this.idcard = idcard;}public Birth() {super();}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone == null ? null : phone.trim();}public String getIdcard() {return idcard;}public void setIdcard(String idcard) {this.idcard = idcard == null ? null : idcard.trim();}@Overridepublic String toString() {StringBuilder sb = new StringBuilder();sb.append(getClass().getSimpleName());sb.append(" [");sb.append("Hash = ").append(hashCode());sb.append(", phone=").append(phone);sb.append(", idcard=").append(idcard);sb.append(", serialVersionUID=").append(serialVersionUID);sb.append("]");return sb.toString();}
}

controller文件夹下UpExcelFileController.java:

@RestController
public class UpExcelFileController {@Autowiredprivate UpExcelFileService upExcelFileService;//导入@RequestMapping(value = "/excel/batchImport",method = RequestMethod.POST)public String saveBirthdayInfoWithExcel(@RequestParam(value = "excel") MultipartFile excel) throws Exception {JSONObject response = new JSONObject();//判断文件是否为空if (excel == null) {response.put("10004", "文件为空");return response.toString();}//获取文件名String fileName = excel.getOriginalFilename();//验证文件是否合格if (!ExcelImportUtils.validateExcel(fileName)) {response.put("10003", "文件必须是excel格式");return response.toString();}//进一步判断文件内容是否为空(即判断其大小是否为0或其名称是否为null)long fileSize = excel.getSize();if (StringUtils.isEmptyOrWhitespaceOnly(fileName) || fileSize == 0) {response.put("10002", "文件不能为空");return response.toString();}//读入input流InputStream inputStream = excel.getInputStream();String res = upExcelFileService.saveBirthList(inputStream,fileName);return res;}}

service文件夹下UpExcelServiceImp.java:

@Service
public class UpExcelFileServiceImpl implements UpExcelFileService{@Autowiredprivate SqlSessionTemplate sqlSessionTemplate;@Overridepublic String saveBirthList(InputStream inputStream,String fileName) throws Exception{JSONObject res = new JSONObject();List<Birth> array = null;//创建excel工作簿Workbook workbook = ParseExcelUtil.getWorkbook(inputStream,fileName);array = ParseExcelUtil.getListByParseExcel(workbook);System.out.println(array.toString());return array.toString();}
}

postman工具测试接口结果如图:

【springboot】上传并解析excel表,使用postman测试上传文件,解决excel版本报错问题相关推荐

  1. 有没有能把excel表弄成线上多人填报的办法?

    把Excel表弄成线上多人填报,最省时省力的方法就是使用在线协作的文档,现在普通的本地Office已经无法满足办公人员移动办公的需求,永中优云这款协作办公工具就能将Excel协作分享至社交群,让多个成 ...

  2. 上传文件时,服务器报错:IOFileUploadException: Processing of multipart/form-data request failed. 设备上没有空间

    1. 问题 SpringBoot上传文件时,服务器报错 2022-06-27 10:58:00.941 ERROR 12700 --- [nio-8900-exec-1] o.a.c.c.C.[.[. ...

  3. postman测试 上传下载文件

    postman测试 上传下载文件 1 测试上传文件 选择 Body 选择 form-data 参数 key 值 填写后 在后面下拉选择 file value 点击 Select Files 选择需要上 ...

  4. Postman测试上传/下载接口

    Postman测试上传/下载接口 1.Postman测试上传接口 2.Postman测试下载接口

  5. MySQL给表增加字段的时候出现Table is full的报错处理

    MySQL给表增加字段的时候出现Table is full的报错处理 文章目录 MySQL给表增加字段的时候出现Table is full的报错处理 一.问题描述 二.错误原因溯源 复现错误 分析 错 ...

  6. python 汇总excel表_【Python】Word表格汇总Excel

    年底了,又到了汇总总结的时候.由于朋友要整理一千多个word表格到excel表上,帮她写了个程序,后来又将它改成更为通用的版本. 其实在这个过程中我找到了有人制作的VBA版,但是使用过程中有BUG [ ...

  7. 计算机excel中累计如何计算,『EXCEL表中,累计计算公式如何设置』excel分段累计求和...

    急,怎么用excel计算累计频率和累计频数啊 可以用2数,标准的FREQUENCY 函数,也可以用countif函数,前者只可以计算频率后者还可以计算累积频率.说明如下: 1.FREQUENCY 函数 ...

  8. 用excel表管理测试用例涉及到的小技巧--excel公式

    1. excel表中如何用公式完成文字和公式共存? 涉及函数CONCATENATE() 用公式"=CONCATENATE()",其中的括号里,EXCEL会提示插入一些字段. 例如: ...

  9. Python xlrd将excel表的指定数据copy到另一个excel表格中

    要复制excel表的内容: 分别在第15.16.17.18.19列 第二张的excel表格: 代码部分: import xlrd from datetime import datetime from ...

最新文章

  1. github 视觉测量_计算机视觉八大任务全概述:PaddlePaddle工程师详解热门视觉模型...
  2. 数据结构源码笔记(C语言):英文单词按字典序排序的基数排序
  3. 获取随机数的方式Random类对象的方法 java 0913
  4. ld framework not found FileProvider for architecture x86_64 报错
  5. 探测能源、跨洲安全通信……你所想不到的量子技术!
  6. 作业:xml练习2-写.xml的外部约束文件(dtd文件)
  7. 打包的时候不把配置文件加进去_苹果软件打包签名原理
  8. java awt run_JAVA教程 第五讲 AWT图形用户界面设计(一)
  9. SqlServer性能检测和优化工具使用详细(sqlserver profiler)
  10. 泛微OA ecology 您查看的文档过大,请下载文档后查看
  11. Guided Anchoring
  12. DLT - Diagnostic Log and Trace简介
  13. android dialog隐藏虚拟按键,Android应用开发之Android dialog 去除虚拟按键的解决方法...
  14. 利用python和递归实现赶鸭子问题
  15. AT4379 [AGC027E] ABBreviate
  16. linux tty字体,ArchLinux TTY 中文字体渲染
  17. 红外图像处理:去竖条
  18. NASA从太空发射激光,制作地球森林高度地图
  19. js的高亮关键写法,简单粗暴,行之有效
  20. Java面试题(十九) 细说线程池秘境“七大参数”护法的身世

热门文章

  1. Cisco ISE AAA认证
  2. MySQL基本操作—DQL实训真题
  3. matlab+字体设置大小,Matlab中如何修改字体的大小?
  4. PHP求日期函数公式,PHP中日期和时间函数简介
  5. AcWing 4411. 三仙归洞 (简单模拟)
  6. JS判断客户端是Android还是iOS
  7. 江苏省昆山市软件公司汇总
  8. you are an asshole
  9. 十八、报销单流程开发
  10. Apple公司联系邮箱收录