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,这个时候肯定很多小伙伴们会懵逼,那么究竟是怎么实现的 ...
最新文章
- python 权限管理 mongodb_MongoDB为用户设置访问权限
- fastclick:处理移动端click事件300毫秒延迟
- java复制图片实现方法
- 苹果数据线不能充电_外媒痛批苹果!iPhone 12不送充电器绝非为环保,理由太真实!|充电器|数据线|手机|iphone...
- Qt Creator连接通用远程Linux设备
- org.eclipse.jdt.internal.compiler.CompilationResult.getProblems()[Lorg/eclipse/jdt/core/compiler/IPr
- python flask快速入门与进阶 百度云_Python Flask快速入门与进阶
- postgresql9.5 run 文件linux安装后配置成开机服务
- C++ 中的 #pragma warning(push) 和 #pragma warning(pop)有什么用
- 计算机技术中,下列的英文缩写和中文名字的对照中,正确的是,计算机技术中,下列的英文缩写和中文名字的对照中。正确的是( )。 a.cad——计算机辅助制造b.cam——计...
- 如何进行用户行为分析并提高用户粘性
- Hinton的GLOM模型与千脑理论有何本质不同?
- Burp Suite使用介绍说明
- win7网络改局域网计算机名,局域网共享一键修复工具(支持win7) 修复windows7各种共享问题...
- linux u盘读取速度,[操作系统]linux dd命令测试U盘读写速度
- 微信分享,获取分享点击事件,登录后才可以分享
- 如何解决C盘实际空闲空间远大于可压缩卷空间
- 服务器如何接收GPS定位器发送过来的数据
- 【译】 WebP 支持:超出你想象
- amd k14主板参数_看U选主板:AMD A8-5600K主板怎么选