这里用的是apache的poi,提供API给Java程序对MicrosoftOffice格式档案读和写的功能,其中使用最多的就是使用POI操作Excel文件

依赖的jar包:

<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.16</version>
</dependency>

工具类:

  • 非线程安全
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.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;/*** Created by wen on 2020/7/15.*/
public class NewPOIUtil {private static Logger logger  = LoggerFactory.getLogger(POIUtil.class);private final static String xls = "xls";private final static String xlsx = "xlsx";/*** 读入excel文件,解析后返回* @param file* @throws IOException*/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+1;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()];boolean notNull = false;//循环当前行for(int cellNum = firstCellNum; cellNum < lastCellNum;cellNum++){Cell cell = row.getCell(cellNum);cells[cellNum] = getCellValue(cell);if (!StringUtils.isEmpty(cells[cellNum])) {notNull = true;}}if (notNull) {list.add(cells);}}}workbook.close();}return list;}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工作薄对象,表示整个excelWorkbook workbook = null;try {//获取excel文件的io流InputStream is = file.getInputStream();//根据文件后缀名不同(xls和xlsx)获得不同的Workbook实现类对象if(fileName.endsWith(xls)){//2003workbook = new HSSFWorkbook(is);}else if(fileName.endsWith(xlsx)){//2007workbook = 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: //BooleancellValue = 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;}
}

记录常用的代码工具(二)--Poi工具类相关推荐

  1. java检测工具_常用Java代码质量检测评估工具

    常用Java代码质量检测评估工具 1. PMD from http://pmd.sourceforge.net/ PMD能够扫描Java 源代码,查找类似以下的潜在问题: 可能的bug--try/ca ...

  2. 【Python数学建模常用算法代码(二)之BP神经网络】

    Python数学建模常用算法代码(二) BP神经网络模型Python代码 import numpy as np import math import random import string impo ...

  3. 二调建设用地地类代码_二调地类代码

    0分 0 21.0KB 2017-09-17 认证考试aphza二调地类代码表. .~ ? 我们|打〈败〉了敌人. ?我们|[把敌人]打〈败〉了. 表A1 土地利用现状分类 一级类 二级类 含义 编码 ...

  4. python︱写markdown一样写网页,代码快速生成web工具:streamlit 重要组件介绍(二)

    python︱写markdown一样写网页,代码快速生成web工具:streamlit(一) 上篇主要是steamlit的介绍以及streamlit的一些初始化,这篇是一些组件的介绍,当然风格是直接上 ...

  5. 转:TestLink1.9.3测试用例:Excel转换XML工具二实现代码

    TestLink1.9.3测试用例:Excel转换XML工具<二>实现代码 http://blog.csdn.net/candle806/article/details/7490599 以 ...

  6. 分享几款比较常用的代码比较工具

    公众号关注 "大鱼机器人" 设为 "星标",重磅干货,第一时间送达! 素材来源:网络 作者:yueliang2100 整理:strongerHuang 俗话说: ...

  7. 代码合并工具_分享几款比较常用的代码比较工具

    俗话说:三句不离本行,对于程序员这个可爱的群体来说也是一样,即使面对无休无止的编程工作,程序员们依旧任劳任怨的埋头苦干,梦想着用自己码下的代码改变世界.工欲善其事,必先利其器,每一位程序员都有自己私藏 ...

  8. 【便签纸】记录一下对比excel列表的小工具代码

    记录一下对比excel列表的小工具代码,方便下次取用,环境python2. #!/usr/bin/env python # -*- coding: UTF-8 -*-import sys import ...

  9. 7款常用的代码对比工具

    在程序开发的过程中,程序员会经常对源代码以及库文件进行代码对比,在这篇文章里我们向大家介绍7款程序员常用的代码比较工具. 1.WinMerge 地址:https://winmerge.org/ Win ...

最新文章

  1. 诗人般的机器学习,ML工作原理大揭秘
  2. 算一串数字的entropy_2020520|一个万年一遇有爱的日子,网友:就是一串数字
  3. 笔记-项目合同管理-索赔的处理
  4. 智慧交通day03-车道线检测实现05:透视变换+代码实现
  5. Java常用设计模式————适配器模式
  6. 使用Latex制作分享,演讲,Presentation用的Slides,PPT——Beamer教程
  7. HCIE Security GRE和L2TP 备考笔记(幕布)
  8. 网易校招——魔法币问题
  9. 分享个B端竞品分析报告
  10. 机械臂运动空间的计算_深圳全气动式工业助力机械手定做
  11. uniapp h5浏览器文件下载
  12. veeam安装和部署_Veeam Backup Replication 8 安装配置
  13. 视频教程-物联网嵌入式技术应用-物联网技术
  14. myeclipse中设置括号匹配颜色
  15. 面圆机的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  16. 听风辨器,神功护体——IT运维人员的九阳神功(中)
  17. colsure php_PHP_PHP中Closure类的使用方法及详解,Closure,匿名函数,又称为Anonym - phpStudy...
  18. 手机号微信号绑定微信号_相关计算机,新手机号被绑定过微信号怎么办?这是个“二次”放号的号码...
  19. JS节点操作——连缀
  20. 微信之父张小龙最新公开课曝光8个互联网新思维:下一个十年将非常有想象力...

热门文章

  1. 计算机人工智能的应用论文,人工智能的发展与应用论文整理.doc
  2. 利用opencv库识别身份证图片
  3. 企业信息安全————2、如何描述风险价值
  4. python----------------flake8
  5. 堡垒之夜显示连接服务器失败,堡垒之夜与主机连接失败怎么办? 连不上服务器解决方案...
  6. Android开发软件Eclipse安装教程
  7. 解读指标 Mali-400MP4 GPU 指标
  8. 可以监测西门子1500/1200PLC数据的小软件
  9. python有哪些码_Python有哪些神一般的蜜汁操作? 《附代码》
  10. 1024程序员节|历经一个月总结使用java实现pdf文件的电子签字+盖章+防伪二维码+水印+PDF文件加密的全套解决方案