美文网首页SpringBoot
Springboot中导入Excel

Springboot中导入Excel

作者: 意识流丶 | 来源:发表于2017-10-26 21:04 被阅读56次

有时候我们需要导入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

相关文章

  • Springboot中导入Excel

    有时候我们需要导入Excel文件,并读取里面的数据 在springboot中我们通常使用POI读取解析Excel文...

  • SpringBoot导出数据为Excel

    Excel导入请参考:SpringBoot读取Excel并存入数据库 引入依赖这里我只是贴出了关键性的依赖~ My...

  • SpringBoot解析Excel

    现在很多web应用中,导入excel导出excel很常见,这篇文章就讲讲导入excel文件。 以批量导入课程为例 ...

  • springboot批量导入excel数据

    1 背景 小白今天闲着没事,在公司摸鱼,以为今天有事无聊的一天,突然上头说小子,今天实现一下批量导入Excel数据...

  • springboot整合poi导入excel

    先上效果图~ 点击批量导入: 下面开始说如何实现的。先说后台准备工作springboot导入maven依赖poi导...

  • POI实现EXCEL导入

    Java开发过程中,有些需求需要实现Excel导入功能,具体就是Excel导入数据直接操作数据库,先将Excel导...

  • js文件上传 、导入报表excel

    这里导入分两种 :1.导入excel数据到后台:批量导入2.导入excel数据到网页:单条导入 导入的excel模...

  • 二. springboot整合Apache POI

    一. 概述 现在java后端主流框架为springboot, 而大部分企业管理系统设计都会设计excel的导入导出...

  • 使用python处理excel

    导入xlrd模块读取excel 导入xlwt模块写入excel

  • HR必会的40个Excel逆天功能,动画教程珍藏版!

    1 自动筛选 2 在Excel中字符替换 3 在Excel中冻结行列标题 4 在Excel中为导入外部数据 5 在...

网友评论

  • f41f4455dc76:非常感谢,正在开发项目,看了这个豁然开朗啊

本文标题:Springboot中导入Excel

本文链接:https://www.haomeiwen.com/subject/zhtlpxtx.html