POI读取excel文件

package com.learn;import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** 读取excel工具类* <dependency>* <groupId>org.apache.poi</groupId>* <artifactId>poi-ooxml</artifactId>* <version>3.17</version>* </dependency>* <dependency>* <groupId>org.apache.poi</groupId>* <artifactId>poi</artifactId>* <version>3.17</version>* </dependency>*/
public class ReadExcel {public static List<Map<Integer, List<String>>> readExcel(MultipartFile file) {//存储excel所有sheet信息List<Map<Integer, List<String>>> totalList = new ArrayList<>();//获取文件流
//        FileInputStream is = null;//创建工作簿Workbook workbook = null;try {
//            is = new FileInputStream(file);
//            workbook = new XSSFWorkbook(is);
//            workbook = new XSSFWorkbook(file.getInputStream());//这是07版本的,不兼容03版本HSSFWorkbookworkbook = WorkbookFactory.create(file.getInputStream());//可兼容03、07版本//获取sheet数量int numberOfSheets = workbook.getNumberOfSheets();for (int i = 0; i < numberOfSheets; i++) {//存储单页sheet信息mapMap<Integer, List<String>> excelMap = new HashMap<>();//获取当前工作表Sheet sheet = workbook.getSheetAt(i);//获取表记录//获取行数 TODO 关于获取行数的方法好像有坑,可以查资料确定一下int numOfRows = sheet.getLastRowNum();for (int rowNum = 0; rowNum < numOfRows; rowNum++) {List<String> infoList = new ArrayList<>();Row rowData = sheet.getRow(rowNum);if (rowData != null) {//读取列int cellCount = rowData.getLastCellNum();for (int cellNum = 0; cellNum < cellCount; cellNum++) {Cell cell = rowData.getCell(cellNum);//匹配数据类型String cellValue = "";if (cell != null) {if (cell.getCellTypeEnum() == CellType.STRING) {cellValue = cell.getStringCellValue();}if (cell.getCellTypeEnum() == CellType.NUMERIC) {//数值型//poi读取整数会自动转化成小数,这里对整数进行还原,小数不做处理long longValue = Math.round(cell.getNumericCellValue());if (Double.parseDouble(longValue + ".0") == cell.getNumericCellValue()) {cellValue = String.valueOf(longValue);} else {cellValue = String.valueOf(cell.getNumericCellValue());}} else if (cell.getCellTypeEnum() == CellType.FORMULA) {//公式型//公式计算的值不会转化成小数,这里数值获取失败后会获取字符try {cellValue = String.valueOf(cell.getNumericCellValue());} catch (Exception e) {cellValue = cell.getStringCellValue();}}infoList.add(cellValue);}else {infoList.add(null);}excelMap.put(rowNum,infoList);}}}totalList.add(excelMap);}} catch (Exception e) {e.printStackTrace();} finally {try {if (workbook != null) {workbook.close();}
//                if (is != null) {
//                    is.close();
//                }} catch (IOException e) {e.printStackTrace();}}return totalList;}
}

POI读取excel。读取MultipartFile格式的excel文件相关推荐

  1. Android app 读取xls和xlsx格式的excel文件

    在app开发中,有项功能 要求读取 Tv电视里面的xls 和 xlsx格式的excel文件 然后显示出来 所以需要poi-3.12-android-a.jar和poi-ooxml-schemas-3. ...

  2. Mac OS X将CSV格式转换为Excel文档格式,Excel转CSV中文乱码问题

    一:在Mac上假设你使用Excel打开windows导出的CSV格式文档.你会发现表格中全部的的内容都显示在A列. 那么,怎样恢复正常呢,你能够将CSV格式的文档导入到Excel文档中,这样就正常显示 ...

  3. 超大数据量的xlsx格式的excel文件的读取和解析,解决了POI方式的内存溢出和性能问题

    在之前的博文< POI读取并解析xlsx格式的excel文件>中,在小数据量的情况下是可以轻松愉快的处理的,但是当excel文件的数据量达到百万级的时候, InputStream is = ...

  4. excel 溢出 修复_修复Excel条件格式重复规则

    excel 溢出 修复 Conditional formatting is a great way to highlight specific data, but did you know that ...

  5. java excel api_全面挖掘Java Excel API 使用方法

    使用Windows操作系统的朋友对Excel(电子表格)一定不会陌生,但是要使用Java语言来操纵Excel文件并不是一件容易的事.在Web应用日益盛行的今天,通过Web来操作Excel文件的需求越来 ...

  6. 【Android】使用poi读取、创建、另存Excel,支持xlsx和部分xls格式

    在这里,我使用的poi是3.12版本的,它不是Apache官方poi包 下载jar包后,将其放进libs文件夹里面,选中两个jar包,鼠标右键点击add As library-添加为库,下载jar点击 ...

  7. Apache POI和EasyExcel 第五集:Apache POI的Excel读取不同类型的数据

    Apache POI和EasyExcel 第五集:Apache POI的Excel读取不同类型的数据 一.资源 什么是Apache POI Apache POI 不同类型的数据的表格(xls) 链接: ...

  8. java excel读取操作,Java 操作 Excel (读取Excel2003 2007,Poi兑现)

    Java 操作 Excel (读取Excel2003 2007,Poi实现) 一. Apache POI 简介( http://poi.apache.org/) 使用Java程序读写Microsoft ...

  9. 【Apache POI】Java 读取Excel文件

    Excel内容如下: 封装Excel行列字段的Bean: public class Employee {private String name;private String gender;privat ...

最新文章

  1. c语言:婚礼上的谎言
  2. Rigidbody.Is Kinematic和碰撞体
  3. 多维数据查询效率分析(1)
  4. Transact SQL 常用语句以及函数
  5. X^2 Mod P(51Nod-1014)
  6. python读取多通道信号中的一个通道_RFID多通道读写器的具体应用
  7. 【javascript】 的严格模式 详解
  8. Python使用线性回归简单预测数据
  9. Mercurial:Hg检出的时候:The system cannot find the path specified
  10. iATKOS v7硬盘安装教程(硬盘助手+变色龙安装版)
  11. SSM项目源码基于ssm的NBA球队|篮球管理系统
  12. C++中---结构体变量的默认值以及构造函数的应用
  13. Redhat下小企鹅输入法的安装
  14. WEB-JSPELJSTL
  15. Eclipse WTP
  16. 【office 2007~office 2019】Excel日期选择控件插件安装
  17. 幸运童年童装 研发制造营销
  18. win10自动更新导致显卡驱动出问题,No AMD Graphics driver is installed or.......的解决方案
  19. python tkinter 实现简易秒表计时器
  20. MySQL-8.0 RESTART命令远程重启mysqld

热门文章

  1. Oracle函数总结(含举例)持续更新
  2. Microsoft Visual C++ 2005无法卸载
  3. JMVM系列之一 MVC多视点参考帧管理类
  4. python30行_随机一张精美壁纸
  5. pip使用163源(linux)
  6. 2021 vivo校招提前批笔试解析
  7. Ray Tracing in One Weekend(中文翻译)
  8. ffmepg实践系列之--硬解接口实现
  9. Android Audio播放音频之数据传递
  10. 神策数据发布汽车行业版,加速车企卓越数字化体验