Java用poi解析Excel,支持xls/xlsx
由于JXL不能支持.xlsx的Excel文件,因此采用POI。
这里要用到的Jar包只需要:org.apache.poi 3.15和org.apache.poi-ooxml 3.15
在POI中,解析.XLS使用的是HSSFWorkbook,解析.XLSX的解析用的是XSSFWorkbook,需要判断处理
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat; import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
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; public class ExcelToDB {private static final String EXCEL_XLS = "xls"; private static final String EXCEL_XLSX = "xlsx"; //判断Excel的版本,获取Workbook public static Workbook getWorkbok(InputStream in,File file) throws IOException{ Workbook wb = null; if(file.getName().endsWith(EXCEL_XLS)){ //Excel 2003 wb = new HSSFWorkbook(in); }else if(file.getName().endsWith(EXCEL_XLSX)){ // Excel 2007/2010 wb = new XSSFWorkbook(in); } return wb; } //判断文件是否是excel public static void checkExcelVaild(File file) throws Exception{ if(!file.exists()){ throw new Exception("文件不存在"); } if(!(file.isFile() && (file.getName().endsWith(EXCEL_XLS) || file.getName().endsWith(EXCEL_XLSX)))){ throw new Exception("文件不是Excel"); } } //由指定的Sheet导出至List public static void exportListFromExcel() throws IOException { SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd"); try { // 同时支持Excel 2003、2007 File excelFile = new File("D:/123.xls"); // 创建文件对象 FileInputStream is = new FileInputStream(excelFile); // 文件流 checkExcelVaild(excelFile); Workbook workbook = getWorkbok(is,excelFile); //Workbook workbook = WorkbookFactory.create(is); // 这种方式 Excel2003/2007/2010都是可以处理的 int sheetCount = workbook.getNumberOfSheets(); // Sheet的数量 /** * 设置当前excel中sheet的下标:0开始 */ Sheet sheet = workbook.getSheetAt(0); // 遍历第一个Sheet // 为跳过第一行目录设置count int count = 0; for (Row row : sheet) { // 跳过第一行的目录 if(count == 0){ count++; continue; } // 如果当前行没有数据,跳出循环 if(row.getCell(0).toString().equals("")){ return ; } String rowValue = ""; for (Cell cell : row) { if(cell.toString() == null){ continue; } int cellType = cell.getCellType(); String cellValue = ""; switch (cellType) { case Cell.CELL_TYPE_STRING: // 文本 cellValue = cell.getRichStringCellValue().getString() + "#"; break; case Cell.CELL_TYPE_NUMERIC: // 数字、日期 if (DateUtil.isCellDateFormatted(cell)) { cellValue = fmt.format(cell.getDateCellValue()) + "#"; } else { cell.setCellType(Cell.CELL_TYPE_STRING); cellValue = String.valueOf(cell.getRichStringCellValue().getString()) + "#"; } break; case Cell.CELL_TYPE_BOOLEAN: // 布尔型 cellValue = String.valueOf(cell.getBooleanCellValue()) + "#"; break; case Cell.CELL_TYPE_BLANK: // 空白 cellValue = cell.getStringCellValue() + "#"; break; case Cell.CELL_TYPE_ERROR: // 错误 cellValue = "错误#"; break; case Cell.CELL_TYPE_FORMULA: // 公式 // 得到对应单元格的公式 //cellValue = cell.getCellFormula() + "#"; // 得到对应单元格的字符串 cell.setCellType(Cell.CELL_TYPE_STRING); cellValue = String.valueOf(cell.getRichStringCellValue().getString()) + "#"; break; default: cellValue = "#"; } //System.out.print(cellValue); rowValue += cellValue; } System.out.println(rowValue); System.out.println(); } } catch (Exception e) { e.printStackTrace(); } finally{ } }
}
常见错误:解析.XLSX时出现“java.lang.NoSuchFieldError: RAW_XML_FILE_HEADER ”
原因是在我引入了3.15的版本后又不小心引入了3.14版本,把3.14版本的Jar包移除,使用正确的3.15问题就不会发生。
感谢原文作者,点击查看原文
Java用poi解析Excel,支持xls/xlsx相关推荐
- java使用poi解析Excel文件
本文取自http://www.cnblogs.com/hongten/p/java_poi_excel_xls_xlsx.html java中读取Excel文件并解析 Excel2007及以前的文件使 ...
- java使用POI解析excel时碰到1900年日期格式造成的取时间不准确问题
发现问题的背景是这样的:要开发一个excel上传工单,使用POI解析工单,获取其中信息的一个功能,其中有一项是加工时间在excel中格式是[h]:mm:ss,是一种自定义格式,转换为时间格式是1900 ...
- Java面试poi中excel版本大小_java 中 poi解析Excel文件版本问题解决办法
java 中 poi解析Excel文件版本问题解决办法 发布时间:2020-10-02 03:46:15 来源:脚本之家 阅读:91 作者:程诺 poi解析Excel文件版本问题解决办法 poi解析E ...
- java使用poi实现excel保护工作表实例代码(支持.xls和.xlsx)
java使用poi实现excel保护工作表,支持.xls和.xlsx类型的excel,代码如下: import java.io.FileInputStream; import java.io.File ...
- java 兼容excel_Java解析Excel工具类(兼容xls和xlsx)
依赖jar org.apache.poi poi-ooxml 4.0.1 ExcelUtils.java package javax.utils; import java.io.File; impor ...
- Java 解析Excel(xls、xlsx两种格式)
Java 解析Excel(xls.xlsx两种格式) 一.环境 JDK 1.8 二.JAR 1.commons-collections4-4.1.jar 2.poi-3.9-20121203.jar ...
- JAVA使用POI操作Excel表,XSSF(xlsx)和HSSF(xls)
JAVA使用POI操作Excel表,XSSF(xlsx)和HSSF(xls) *** POI的结构: ---*HSSF - 提供读写Microsoft Excel格式档案的功能. ---*XSSF - ...
- java解析excel报错,poi解析excel文件报错
getFileMagic() only operates on streams which support mark(int) 使用 bis 解决 BufferedInputStream bis = ...
- java excel row遍历空_用Java巧妙的解析Excel中的POI
原标题:用Java巧妙的解析Excel中的POI 相信各位小伙伴们,在做Java开发的时候,有时候会需要你用Java语言去解析Excel中的POI,这个时候肯定很多小伙伴们会懵逼,那么究竟是怎么实现的 ...
最新文章
- [pytorch][stepbystep]在pytorch上实现卷积神经网路(CNN)的裁剪(purning)
- linux cat pdf文件怎么打开,linux下cat 命令使用详解:显示文件内容
- 计算机没考好检讨,考试没考好检讨书范文(精选6篇)
- python- is和id
- maven2中snapshot快照库和release发布库的应用
- 真正的大学老师,是那些无需打卡和考评,也会不可遏止地要去读书写作和上课的人...
- dubbo consumer 端口_Dubbo普普通通9问
- SIP协议栈读书笔记1
- 看了这个有趣的例子,你就能秒懂Java中的多线程同步了!
- MATLAB中的eps
- 【果断收藏】16个经典面试问题及回答思路
- diamond简介和搭建
- xp怎样修改计算机mac地址,WinXP系统MAC地址修改的方法
- HTTP状态码404、413、500
- 苹果手机换电池对手机有影响吗_苹果手机换电池去哪里换?这样操作既省钱又省力...
- HDU—— 4464 Browsing History
- 我为什么不挣钱也要写公众号
- ireport怎么实现总计和小计?
- VMware环境下修改Centos qcow2格式镜像
- 前端:LayUi监听表格单元格,编辑后恢复原数据
热门文章
- 关于外部FLASH芯片的初步使用—以M25P80为例
- 工程伦理--15.4 异种移植的伦理问题(下)
- 对不起,我不再爱你了
- android studio模拟器进去就闪退,然后提示unfortunately,xx has stopped
- 【技术白皮书】第二章:OCR智能文字识别回顾——自然语言文本发展历程
- 【亲爱的安吉维拉】读后感
- PCB各层的含义 (solder 和 paste 区别)
- 7个关键组件保障小型企业安全在线
- 清华计算机系19级研究生状元,全员清华、北大!2019高考状元去向最全统计出炉!...
- Transformer课程 业务对话机器人Rasa 3.x Fallback and Human Handoff