SpringBoot(十三)_springboot上传Excel并读取excel中的数据 - Kevin_zheng

zhenghengbin 2018-08-16 原文


SpringBoot(十三)_springboot上传Excel并读取excel中的数据


今天工作中,发现同事在整理数据,通过excel上传到数据库。所以现在写了篇利用springboot读取excel中的数据的demo。至于数据的进一步处理,大家肯定有不同的应用场景,自行修改

今天工作中,发现同事在整理数据,通过excel上传到数据库。所以现在写了篇利用springboot读取excel中的数据的demo。至于数据的进一步处理,大家肯定有不同的应用场景,自行修改

pom文件

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.13</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.13</version>
        </dependency>

    </dependencies>

controller 代码


@Controller
public class ImportController {

    @Autowired
    private ImportService importService;


    @PostMapping(value = "/upload")
    @ResponseBody
    public String uploadExcel(HttpServletRequest request) throws Exception {
        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;

        MultipartFile file = multipartRequest.getFile("filename");
        if (file.isEmpty()) {
            return "文件不能为空";
        }
        InputStream inputStream = file.getInputStream();
        List<List<Object>> list = importService.getBankListByExcel(inputStream, file.getOriginalFilename());
        inputStream.close();

        for (int i = 0; i < list.size(); i++) {
            List<Object> lo = list.get(i);
            //TODO 随意发挥
            System.out.println(lo);

        }
        return "上传成功";
    }

}

service 代码

@Service
public class ImportService {


    /**
     * 处理上传的文件
     *
     * @param in
     * @param fileName
     * @return
     * @throws Exception
     */
    public List getBankListByExcel(InputStream in, String fileName) throws Exception {
        List list = new ArrayList<>();
        //创建Excel工作薄
        Workbook work = this.getWorkbook(in, fileName);
        if (null == work) {
            throw new Exception("创建Excel工作薄为空!");
        }
        Sheet sheet = null;
        Row row = null;
        Cell cell = null;

        for (int i = 0; i < work.getNumberOfSheets(); i++) {
            sheet = work.getSheetAt(i);
            if (sheet == null) {
                continue;
            }

            for (int j = sheet.getFirstRowNum(); j <= sheet.getLastRowNum(); j++) {
                row = sheet.getRow(j);
                if (row == null || row.getFirstCellNum() == j) {
                    continue;
                }

                List<Object> li = new ArrayList<>();
                for (int y = row.getFirstCellNum(); y < row.getLastCellNum(); y++) {
                    cell = row.getCell(y);
                    li.add(cell);
                }
                list.add(li);
            }
        }
        work.close();
        return list;
    }

    /**
     * 判断文件格式
     *
     * @param inStr
     * @param fileName
     * @return
     * @throws Exception
     */
    public Workbook getWorkbook(InputStream inStr, String fileName) throws Exception {
        Workbook workbook = null;
        String fileType = fileName.substring(fileName.lastIndexOf("."));
        if (".xls".equals(fileType)) {
            workbook = new HSSFWorkbook(inStr);
        } else if (".xlsx".equals(fileType)) {
            workbook = new XSSFWorkbook(inStr);
        } else {
            throw new Exception("请上传excel文件!");
        }
        return workbook;
    }

}

代码下载

完整代码下载:github

发表于
2018-08-16 22:20 
Kevin_zheng 
阅读(33761
评论(3
编辑 
收藏 
举报

 

版权声明:本文为zhenghengbin原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zhenghengbin/p/9490511.html

SpringBoot(十三)_springboot上传Excel并读取excel中的数据 - Kevin_zheng的更多相关文章

  1. Unity3D入门 – Sun‘刺眼的博客

    Unity3D入门 Unity3D是一款应用广泛的3D游戏引擎,本文主要介绍unity3D的简单应用,安装过程 […]...

  2. Docker – dockerhub 相关命令

    1. 概述 水一发 docker 命令行里 dockerhub 相关的命令 2. 准备 有一个 dockerh […]...

  3. Dijkstra算法(一)之 C语言详解 – 如果天空不死

    Dijkstra算法(一)之 C语言详解 本章介绍迪杰斯特拉算法。和以往一样,本文会先对迪杰斯特拉算法的理论论 […]...

  4. 将Eclipse中现有的java类生成类图 – Flex/AS Programmer

    需求:将Eclipse中现有的java类生成类图 一:什么是ModelGoon? 它是一个Eclipse插件, […]...

  5. 2.7-Air302(NB-IOT)-基础外设-锂电池充电供电,市电断电检测 – 杨奉武

    2.7-Air302(NB-IOT)-基础外设-锂电池充电供电,市电断电检测 <p><ifr […]...

  6. linux下mysql常用命令 – 码农之上~

    linux下mysql常用命令 转自:http://www.jb51.net/LINUXjishu/36171 […]...

  7. 分类任务评价——混淆矩阵、精度、召回率的具体解释 – wzd321

    分类任务评价——混淆矩阵、精度、召回率的具体解释 Posted on 2018-09-11 21:22  wz […]...

  8. Eclipse快捷键 – Flex/AS Programmer

    右移(右缩进):Tab键 左移(左缩进):Shift+Tab键 整行下移:Alt+Down 整行上移:Alt+ […]...

随机推荐

  1. WCF版的PetShop之一:PetShop简介[提供源代码下载]

    在《WCF技术剖析(卷1)》的最后一章,我写了一个简单基于WCF的Web应用程序,该程序模拟一个最简单的网上订 […]...

  2. Git和Github的基本操作

    一、了解Git和Github 1、什么是GIT? Git是一个免费、开源的版本控制软件 2、什么是版本控制系统 […]...

  3. 【ShoppingWebCrawler】-基于Webkit内核的爬虫蜘蛛引擎概述

    写在开头 在各个电商平台发展日渐成熟的今天。很多时候,我们需要一些平台上的基础数据。比如:商品分类,分类下的商 […]...

  4. 解决CSS图片底部3像素问题总结

    解决CSS图片底部3像素问题总结 解决三像素问题的总结: 1.img标签的父标签增加font-size:0; […]...

  5. JDBC驱动程序注册 JDBC简介(二)

    使用JDBC进行数据库操作的第一步就是驱动注册(当然你得先导入JAR)。 驱动注册有多种方式,第一步必然是获得 […]...

  6. 五布局之绝对布局AbsoluteLayout

    1.AbsoluteLayout   绝对布局,又叫坐标布局,可以直接制定子元素的绝对位置(xy)。   由于 […]...

  7. 基于医疗知识图谱的问答系统(二)

    一.问答系统 问答系统从知识领域划分: 封闭领域:封闭领域系统专注于回答特定领域的问题,由于问题领域受限,系统 […]...

  8. 剖析云计算中的“共享型数据库”(转载)

    一、摘要    随着云计算的出现,出现了很多新的名词,像云数据库、云存储、弹性扩容,资源隔离等词汇。下面就大家 […]...

展开目录

目录导航