Springboot中导入Excel

简介: 有时候我们需要导入Excel文件,并读取里面的数据在springboot中我们通常使用POI读取解析Excel文件在使用POI之前我们需要引入必要的依赖 org.

有时候我们需要导入Excel文件,并读取里面的数据

在springboot中我们通常使用POI读取解析Excel文件

在使用POI之前我们需要引入必要的依赖

<!--POI,用于解析Excel文件-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.17</version>
        </dependency>

准备好Excel源文件
格式像这样,标题无所谓

Paste_Image.png

Excel表的路径可能有两种,第一:本机路径,第二:是个网络路径

我们先考虑第一种情况:本机路径

将此文件命名为:测试.xlsx,放到resources目录下
下面做个通过导入exexl来实现用户批量插入
对应的实体类

public class UserVo {
    String userId;
    String memberName;
    String password;
    String phoneNumber;
    String department;
    String grade;
省略set/get方法
}

然后具体的添加用户的dao层和service层我就不具体写了
controller层

public Object importExcel() throws Exception {
        XSSFWorkbook book = new XSSFWorkbook(new FileInputStream(ResourceUtils.getFile("classpath:测试.xlsx")));
        XSSFSheet sheet = book.getSheetAt(0);
        UserVo userVo = new UserVo();
        for (int i = 2; i < sheet.getLastRowNum() + 1; i++) {
            XSSFRow row = sheet.getRow(i);
            userVo.setMemberName(row.getCell(0).getStringCellValue());
            userVo.setPhoneNumber(String.valueOf((long) row.getCell(1).getNumericCellValue()));
            userVo.setPassword(row.getCell(2).getStringCellValue());
            userVo.setDepartment(row.getCell(3).getStringCellValue());
            userVo.setGrade(String.valueOf((long) row.getCell(4).getNumericCellValue()));
            userService.addUser(userVo);
        }
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("message", "导入成功");
        return jsonObject;
    }

要看清楚导入的Excel的后缀名,如果是xls,使用HSSFWorkbook;如果是xlsx,使用XSSFWorkbook,读取两种格式使用Workbook,不然会报异常org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be in the Office 2007+ XML.
相关方法说明
XSSFWorkbook book = new XSSFWorkbook()得到Excel工作簿对象
XSSFSheet sheet = book.getSheetAt(0);得到Excel工作表对象
sheet.getLastRowNum()总行数
sheet.getRow()得到Excel工作表的行
row.getCell()得到Excel工作表指定行的单元格
在取数据的时候很容易碰到这样的异常Cannot get a text value from a numeric cell无法将数值类型转化成String

解决方法
①通过String.valueOf()方法转
②将所有列中的内容都设置成String类型格式
row.getCell(要设置的列数,从0开始).setCellType(CellType.STRING);
Cell.CELL_TYPE_STRING已经替换为CellType.STRING,
官方不建议使用Cell.CELL_TYPE_STRING

第二:Excel文件是个网络路径

FileInputStream不支持从网络路径获取数据
所以要使用java.net包下的URL

URL excelUrl = new URL(网络地址);
XSSFWorkbook book = new XSSFWorkbook(excelUrl.openStream());
其中这里有个问题要注意

如果你上传的文件的文件名有中文,就会去中文进行转义,通过urlencode(urlencode是一个函数,可将字符串以URL编码,用于编码处理。)
一般的url是不允许出现中文的

image.png

网络路径有中文,会报java.io.FileNotFoundException也就是找不到文件,因为路径有中文就找不到了,也许在浏览器打开,但是在代码中是找不到这个路径的
之后的操作都一样

参考钟述林大牛的文章:http://www.jianshu.com/p/cba49a1acc1d

目录
相关文章
|
2月前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
24天前
|
Java Maven Android开发
eclipse如何导入springboot项目
本文介绍了如何在Eclipse中导入Spring Boot项目。
21 1
eclipse如何导入springboot项目
|
21天前
|
easyexcel Java UED
SpringBoot中大量数据导出方案:使用EasyExcel并行导出多个excel文件并压缩zip后下载
在SpringBoot环境中,为了优化大量数据的Excel导出体验,可采用异步方式处理。具体做法是将数据拆分后利用`CompletableFuture`与`ThreadPoolTaskExecutor`并行导出,并使用EasyExcel生成多个Excel文件,最终将其压缩成ZIP文件供下载。此方案提升了导出效率,改善了用户体验。代码示例展示了如何实现这一过程,包括多线程处理、模板导出及资源清理等关键步骤。
|
2月前
|
SQL C# 数据库
EPPlus库的安装和使用 C# 中 Excel的导入和导出
本文介绍了如何使用EPPlus库在C#中实现Excel的导入和导出功能。首先,通过NuGet包管理器安装EPPlus库,然后提供了将DataGridView数据导出到Excel的步骤和代码示例,包括将DataGridView转换为DataTable和使用EPPlus将DataTable导出为Excel文件。接着,介绍了如何将Excel数据导入到数据库中,包括读取Excel文件、解析数据、执行SQL插入操作。
EPPlus库的安装和使用 C# 中 Excel的导入和导出
|
2月前
|
前端开发 Java easyexcel
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
35 6
|
3月前
|
JavaScript 前端开发 easyexcel
基于SpringBoot + EasyExcel + Vue + Blob实现导出Excel文件的前后端完整过程
本文展示了基于SpringBoot + EasyExcel + Vue + Blob实现导出Excel文件的完整过程,包括后端使用EasyExcel生成Excel文件流,前端通过Blob对象接收并触发下载的操作步骤和代码示例。
488 0
基于SpringBoot + EasyExcel + Vue + Blob实现导出Excel文件的前后端完整过程
|
3月前
|
关系型数据库 MySQL Windows
MySQL数据导入:MySQL 导入 Excel 文件.md
MySQL数据导入:MySQL 导入 Excel 文件.md
|
4月前
|
存储 关系型数据库 MySQL
Excel 导入 sql3
【7月更文挑战第18天】
43 2
|
3月前
|
前端开发 easyexcel
SpringBoot+Vue3实现Excel导入
SpringBoot+Vue3实现Excel导入
95 0
|
4月前
|
Java Maven
SpringBoot第一次导入项目,Maven依赖全爆红,该怎样解决,idea2019.3版本,必须用application2.7.6或者以下
SpringBoot第一次导入项目,Maven依赖全爆红,该怎样解决,idea2019.3版本,必须用application2.7.6或者以下