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. mongodb 3.0 WT 引擎性能测试(转载)

    网上转载来的测试,仅供参考.原文地址:http://www.mongoing.com/benchmark_3_0 类机器. 测试均在单机器,单实例的情况下进行. 机器A(cache 12G,即内存&g ...

  2. POJ - 2689 Prime Distance (区间筛)

    题意:求[L,R]中差值最小和最大的相邻素数(区间长度不超过1e6). 由于非素数$n$必然能被一个不超过$\sqrt n$的素数筛掉,因此首先筛出$[1,\sqrt R]$中的全部素数,然后用这些素 ...

  3. 使用 Capistrano 部署总结

    使用 Capistrano 部署总结 2014年6月27日 admin发表评论阅读评论 简介 Capistrano 是一个 Ruby 程序,它提供高级的工具集来部署你的 Web应用到服务器上.Capi ...

  4. qt5--QLabel标签控件

    需要 #include <QLabel> label->setFrameShape(QFrame::Box);     //设置边框 边框样式参看:https://www.cnblo ...

  5. Java——静态代理、动态代理

    https://blog.csdn.net/giserstone/article/details/17199755 代理的作用:业务类只需要关注业务逻辑本身,保证了业务类的重用性 一 静态代理 特点: ...

  6. 2019春Python程序设计练习3(0402--0408)

    1-1 如a是一个列表,且a[:]与a[::-1]相等,则a中元素按顺序排列构成一个回文. (2分) T         F 1-3 表达式 {1, 3, 2} > {1, 2, 3} 的值为T ...

  7. mysql ef vs

    https://www.cnblogs.com/dux2013/archive/2017/12/11/8025077.html

  8. php重写与重载

    转载:https://blog.csdn.net/binghui1990/article/details/9105237 重写/覆盖 override   指:子类重写了父类的同名方法 (注:1.重写 ...

  9. MySQL的字符集操作命令总结

    这篇文章主要介绍了MySQL的字符集操作命令总结,包括各种查看数据库.数据表等查询命令,需要的朋友可以参考下   以下均在mysql 5.5命令行中运行通过: 查看MySQL支持的字符集: 代码如下: ...

  10. (Java多线程系列六)join()的用法和线程的优先级

    join()的用法和线程的优先级 1.join()的用法 join()作用就是让其他线程处于等待状态 先看一个需求:创建一个线程,子线程执行完毕后,主线程才能执行 public class JoinT ...