import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile; import java.io.IOException;
import java.math.BigDecimal;
import java.util.*; public class ImportExcelTool {
public static List<Map<String, String>> readExcel(MultipartFile file) throws IOException {
Workbook workbook = null;
String fileName = file.getOriginalFilename();
if (Objects.requireNonNull(fileName).endsWith(".xlsx"))
workbook = new XSSFWorkbook(file.getInputStream());
if (fileName.endsWith(".xls"))
workbook = new HSSFWorkbook(file.getInputStream());
Sheet sheet = Objects.requireNonNull(workbook).getSheetAt(0);
int physicalNumberOfRows = sheet.getPhysicalNumberOfRows(); Row row = sheet.getRow(1);
List<String> fieldNames = new ArrayList<>();
for (int i = 0; i < row.getLastCellNum(); i++)
fieldNames.add(row.getCell(i).getRichStringCellValue().getString()); List<Map<String, String>> lsMap = new ArrayList<>(); for (int j = 3; j < physicalNumberOfRows; j++) {
Map<String, String> dataMap = new HashMap<>();
Row dataRow = sheet.getRow(j);
if (dataRow == null)
break;
for (int i = 0; i < dataRow.getLastCellNum(); i++) {
String val = getCellValue(dataRow.getCell(i));
dataMap.put(fieldNames.get(i), val);
}
if (dataMap.size() == 0)
break; lsMap.add(dataMap);
}
return lsMap;
} private static String getCellValue(Cell cell) {
if (cell == null)
return "";
if (cell.getCellType() == CellType.NUMERIC)
if (DateUtil.isCellDateFormatted(cell))
return DateUtil.getJavaDate(cell.getNumericCellValue()).toString();
else
return new BigDecimal(cell.getNumericCellValue()).toString();
else if (cell.getCellType() == CellType.STRING)
return StringUtils.trimToEmpty(cell.getStringCellValue());
else if (cell.getCellType() == CellType.FORMULA)
return StringUtils.trimToEmpty(cell.getCellFormula());
else if (cell.getCellType() == CellType.BLANK)
return "";
else if (cell.getCellType() == CellType.BOOLEAN)
return String.valueOf(cell.getBooleanCellValue());
else if (cell.getCellType() == CellType.ERROR)
return "ERROR";
else
return cell.toString().trim(); }
}

用poi从excel文档导入数据的更多相关文章

  1. struts2中利用POI导出Excel文档并下载

    1.项目组负责人让我实现这个接口,因为以前做过类似的,中间并没有遇到什么太困难的事情.其他不说,先上代码: package com.tydic.eshop.action.feedback; impor ...

  2. Java之Poi导出Excel文档

    一.Poi简介 在后台管理系统中,我们经常要做的导出操作,通常导出为Excel文档的形式,而Poi则提供了这种需要的支持. 二.Workbook/HSSFWorkbook/XSSFWorkbook 1 ...

  3. POI 读取Excel文档中的数据——兼容Excel2003和Excel2007

    Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. HSSF - 提供读写Microsoft Exce ...

  4. POI导出Excel文档通用工具方法

    import java.lang.reflect.InvocationTargetException; import java.util.List; import java.util.Map; imp ...

  5. 使用struts2和poi导出excel文档

    poi眼下应该是比較流行的操作excel的工具了.这几天做了个struts2和poi结合使用来实现导出excel的功能.个人认为还是比較有用的.代码阅读起来也非常easy.下来就来分享下我的心得 1  ...

  6. excel文档中数据导入sql server注意事项

    进来经常需要对一些基础数据进行更新,而业务方提供的数据源往往都是excel,所以经常需要将excel中数据导入到 数据库临时表,然后再进行处理. 在导入过程中,发现有些数据比如手机号码,如果默认导入, ...

  7. POI之Excel文档增删改查

    需要引用apache第三方lib库poi 支持xls.xlsx格式excel读写操作 package com.hua.excel; import java.io.File;import java.io ...

  8. 【Java】常用POI生成Excel文档设置打印样式

    package poi_test; import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi ...

  9. 怎么对比两个excel文档的数据差异

    百度经验: https://jingyan.baidu.com/article/6181c3e0877c7a152ef15304.html

随机推荐

  1. 使用fastjson的parseObject方法将json字符串转换成Map 或者List

    fastjson 转换成map HashMap<String,String> map = JSON.parseObject(jsonStr,new TypeReference<Has ...

  2. 如何优雅高效的写博客(Sublime + Markdown + Evernote)

    如何优雅高效的写博客(Sublime + Markdown + Evernote) 本文主要是参照了几位大神的博客加上自己捣鼓了半天,比较适合新手流畅阅读 非常感谢下面两位大神: @dc_726: h ...

  3. SELinux 对nginx访问目录的影响

    centos新装的系统,用yum 安装的nginx . 因用yum 安装的nginx 默认目录在/usr下面. 当SELinux开启时,将会禁止访问设置在其他路径下的地址.比如我设置server 中 ...

  4. 忘记mysql或mariadb数据库密码的解决方案

    主机环境 主机系统:

  5. poj2987 Firing[最小割]

    题目 求选最少点个数的最大权闭合子图.(板子题) 最小割入门题,什么都不想说,丢个别人题解地址就跑. 附加几点个人理解:与s相通的S点集是闭合子图,剩下的与t相通的T点集是其他的.任意一个割都保证了有 ...

  6. SQL Server自动备份

    1.打开SQL Server Management Studio 数据库-管理-维护计划,右键,维护计划向导 2.在弹出页面右下方点击[更改],修改计划执行方案 根据需要,修改执行时间 3.修改完毕后 ...

  7. Python 面向对象Ⅳ

    类的继承 面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制. 通过继承创建的新类称为子类或派生类,被继承的类称为基类.父类或超类. 继承语法 在python中继承中的 ...

  8. Qt修改图片的背景色及设置背景色为透明的方法

    先上干货. Qt下修改图片背景色的方法: 方法一: QPixmap CKnitWidget::ChangeImageColor(QPixmap sourcePixmap, QColor origCol ...

  9. 报错:没有与参数列表匹配的构造函数 "CFileDialog::CFileDialog" 实例

    如果是在解决方案管理器窗口内,右击你的项目“项目”,然后选“属性”(最后一项),再点“配置属性”,是个“+”号,把它展开,然后选“常规”选项卡,倒数第三项“字符集”,选择“使用多字节字符集”.再编译应 ...

  10. 【Python】PIL模块

    Python自建库,在爬虫等基础应用中更加简单好记,做整理以备自查. 目录 Image模块 open类.Save类.format类.Mode类.convert类.Size类.Info类.new类.Co ...