POI之Excel导入
1,maven配置
- <dependency>
- <groupId>org.apache.poi</groupId>
- <artifactId>poi-ooxml</artifactId>
- <version>${poi.version}</version>
- </dependency>
2,Controller层
- /**
- * Excel导入数据
- * @return
- */
- @ResponseBody
- @RequestMapping(value="importExcel", method={RequestMethod.GET, RequestMethod.POST})
- public String importExcel(HttpServletRequest request, String name) {
- JSONObject result = new JSONObject();
- result.put("code", 0);
- result.put("msg", "导入成功!");
- //初始化解析器
- CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getServletContext());
- //解析form中是否有enctype="multipart/form-data"
- try {
- if (multipartResolver.isMultipart(request)) {
- MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
- Iterator iterator = multipartRequest.getFileNames();
- while (iterator.hasNext()) {
- MultipartFile multipartFile = multipartRequest.getFile(iterator.next().toString());
- List<String[]> data = GhPOIUtils.readExcel(multipartFile);
- Method method = IExportExcelService.class.getDeclaredMethod(name + "Import", new Class[]{List.class});
- method.invoke(exportExcelService, data);
- }
- }
- } catch(Exception e) {
- result.put("code", -1);
- result.put("msg", e.getMessage());
- }
- return result.toString();
- }
3,Util
- package com.smart.produce.core.utils.comm;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.ArrayList;
- import java.util.List;
- import org.apache.log4j.Logger;
- import org.apache.poi.hssf.usermodel.HSSFWorkbook;
- import org.apache.poi.ss.usermodel.Cell;
- import org.apache.poi.ss.usermodel.Row;
- import org.apache.poi.ss.usermodel.Sheet;
- import org.apache.poi.ss.usermodel.Workbook;
- import org.apache.poi.xssf.usermodel.XSSFWorkbook;
- import org.springframework.web.multipart.MultipartFile;
- /**
- * excel读写工具类 */
- public class GhPOIUtils {
- private static Logger logger = Logger.getLogger(GhPOIUtils.class);
- private final static String xls = "xls";
- private final static String xlsx = "xlsx";
- public static void checkFile(MultipartFile file) throws IOException{
- //判断文件是否存在
- if(null == file){
- logger.error("文件不存在!");
- throw new FileNotFoundException("文件不存在!");
- }
- //获得文件名
- String fileName = file.getOriginalFilename();
- //判断文件是否是excel文件
- if(!fileName.endsWith(xls) && !fileName.endsWith(xlsx)){
- logger.error(fileName + "不是excel文件");
- throw new IOException(fileName + "不是excel文件");
- }
- }
- public static Workbook getWorkBook(MultipartFile file) {
- //获得文件名
- String fileName = file.getOriginalFilename();
- //创建Workbook工作薄对象,表示整个excel
- Workbook workbook = null;
- try {
- //获取excel文件的io流
- InputStream is = file.getInputStream();
- //根据文件后缀名不同(xls和xlsx)获得不同的Workbook实现类对象
- if(fileName.endsWith(xls)){
- //2003
- workbook = new HSSFWorkbook(is);
- }else if(fileName.endsWith(xlsx)){
- //2007
- workbook = new XSSFWorkbook(is);
- }
- } catch (IOException e) {
- logger.info(e.getMessage());
- }
- return workbook;
- }
- public static String getCellValue(Cell cell){
- String cellValue = "";
- if(cell == null){
- return cellValue;
- }
- //把数字当成String来读,避免出现1读成1.0的情况
- if(cell.getCellType() == Cell.CELL_TYPE_NUMERIC){
- cell.setCellType(Cell.CELL_TYPE_STRING);
- }
- //判断数据的类型
- switch (cell.getCellType()){
- case Cell.CELL_TYPE_NUMERIC: //数字
- cellValue = String.valueOf(cell.getNumericCellValue());
- break;
- case Cell.CELL_TYPE_STRING: //字符串
- cellValue = String.valueOf(cell.getStringCellValue());
- break;
- case Cell.CELL_TYPE_BOOLEAN: //Boolean
- cellValue = String.valueOf(cell.getBooleanCellValue());
- break;
- case Cell.CELL_TYPE_FORMULA: //公式
- cellValue = String.valueOf(cell.getCellFormula());
- break;
- case Cell.CELL_TYPE_BLANK: //空值
- cellValue = "";
- break;
- case Cell.CELL_TYPE_ERROR: //故障
- cellValue = "非法字符";
- break;
- default:
- cellValue = "未知类型";
- break;
- }
- return cellValue;
- }
- /**
- * 读入excel文件,解析后返回
- * @param file
- */
- public static List<String[]> readExcel(MultipartFile file) throws IOException{
- //检查文件
- checkFile(file);
- //获得Workbook工作薄对象
- Workbook workbook = getWorkBook(file);
- //创建返回对象,把每行中的值作为一个数组,所有行作为一个集合返回
- List<String[]> list = new ArrayList<String[]>();
- if(workbook != null){
- for(int sheetNum = 0;sheetNum < workbook.getNumberOfSheets();sheetNum++){
- //获得当前sheet工作表
- Sheet sheet = workbook.getSheetAt(sheetNum);
- if(sheet == null){
- continue;
- }
- //获得当前sheet的开始行
- int firstRowNum = sheet.getFirstRowNum();
- //获得当前sheet的结束行
- int lastRowNum = sheet.getLastRowNum();
- //循环所有行
- for(int rowNum = firstRowNum;rowNum <= lastRowNum;rowNum++){
- //获得当前行
- Row row = sheet.getRow(rowNum);
- if(row == null){
- continue;
- }
- //获得当前行的开始列
- int firstCellNum = row.getFirstCellNum();
- //获得当前行的列数
- int lastCellNum = row.getPhysicalNumberOfCells();
- String[] cells = new String[row.getPhysicalNumberOfCells()];
- //循环当前行
- for(int cellNum = firstCellNum; cellNum < lastCellNum;cellNum++){
- Cell cell = row.getCell(cellNum);
- cells[cellNum] = getCellValue(cell);
- }
- list.add(cells);
- }
- }
- workbook.close();
- }
- return list;
- }
- }
POI之Excel导入的更多相关文章
- SpringBoot集成文件 - 集成POI之Excel导入导出
Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能.本文主要介绍通过Spr ...
- Spring Boot学习笔记----POI(Excel导入导出)
业务:动态生成模板导出Excel,用户修改完再导入Excel. Spring boot + bootstrap + poi 1.添加Dependence <dependency> < ...
- Java之POI的excel导入导出
一.Apache POI是一种流行的API,它允许程序员使用Java程序创建,修改和显示MS Office文件.这由Apache软件基金会开发使用Java分布式设计或修改Microsoft Offic ...
- POI操作Excel导入和导出
Apache的POI组件是Java操作Microsoft Office办公套件的强大API,当中对Word,Excel和PowperPoint都有支持,当然使用较多的还是Excel.由于Word和Po ...
- 【原创】POI操作Excel导入导出工具类ExcelUtil
关于本类线程安全性的解释: 多数工具方法不涉及共享变量问题,至于添加合并单元格方法addMergeArea,使用ThreadLocal变量存储合并数据,ThreadLocal内部借用Thread.Th ...
- 基于POI的Excel导入导出(JAVA实现)
今天做了个excel的导入导出功能,在这记录下. 首先现在相关poi的相关jar包,资源链接:http://download.csdn.net/detail/opening_world/9663247 ...
- POI实现Excel导入导出
我们知道要创建一张excel你得知道excel由什么组成,比如说sheet也就是一个工作表格,例如一行,一个单元格,单元格格式,单元格内容格式…这些都对应着poi里面的一个类. 一个excel表格: ...
- Java使用Apache POI进行Excel导入和导出
Manve依赖 <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --> <dependency> ...
- 使用poi进行excel导入并解析插入数据库
前言 最近还得写excel的导入导出,结果还是得百度,虽然都能看懂,但是还是想记录下来这些东西 正文 1. 导入jar包 <dependency> <groupId>org.a ...
随机推荐
- Xcode模版生成文件头部注释
在使用Xcode创建工程或者新建类的时候,顶部都会有一些xcode帮我们生成的注释 //// MySingletonClass.h// 单例模式//// Created by mark on 15/8 ...
- ajax的历史
ajax (AJAX开发) 编辑 AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. AJAX ...
- poj_3977 折半枚举
题目大意 给定N(N<=35)个数字,每个数字都<= 2^15. 其中一个或多个数字加和可以得到s,求出s的绝对值的最小值,并给出当s取绝对值最小值时,需要加和的数字的个数. 题目分析 需 ...
- 【HTML】改变鼠标样式图片css
你需要一张图 .ico 的 格式 如果一开始你要解决的是怎么去用png 格式图片转成 ICO格式 先做一张32*32的PNG格式图片 然后 打开http://www.easyicon.net/co ...
- nodejs 事件EventEmitter
index.js: // 引入 events 模块 var events = require('events'); //处理函数要写在调用前 var eventHandler = function() ...
- 【BZOJ2743】[HEOI2012]采花 离线+树状数组
[BZOJ2743][HEOI2012]采花 Description 萧芸斓是Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了n朵花, ...
- CentOS 目录结构详解
linux 目录结构 linux目录树 /: 根目录,一般根目录下只存放目录,不要存放文件,/etc./bin./dev./lib./sbin应该和根目录放置在一个分区中/bin:/usr/bin: ...
- JAVAWEB Filter使用
Filter学习 1Filter是什么:是过滤器简称 2Filter有什么作用:在filter中可以得到代表用户请求和响应的request.response对象,因此在编程中可以使用Decorator ...
- Oracle Schema Objects——Synonyms
Oracle Schema Objects 同义词 同义词 = 表的别名. 现在假如说有一张数据表的名称是“USER1.student”,而现在又为这张数据表起了一个“USER1”的名字,以后就可以直 ...
- Nmap介绍
1.Nmap介绍 Nmap用于列举网络主机清单.管理服务升级调度.监控主机或服务运行状况.Nmap可以检测目标机是否在线.端口开放情况.侦测运行的服务类型及版本信息.侦测操作系统与设备类型等信息. 1 ...