由于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相关推荐

  1. java使用poi解析Excel文件

    本文取自http://www.cnblogs.com/hongten/p/java_poi_excel_xls_xlsx.html java中读取Excel文件并解析 Excel2007及以前的文件使 ...

  2. java使用POI解析excel时碰到1900年日期格式造成的取时间不准确问题

    发现问题的背景是这样的:要开发一个excel上传工单,使用POI解析工单,获取其中信息的一个功能,其中有一项是加工时间在excel中格式是[h]:mm:ss,是一种自定义格式,转换为时间格式是1900 ...

  3. Java面试poi中excel版本大小_java 中 poi解析Excel文件版本问题解决办法

    java 中 poi解析Excel文件版本问题解决办法 发布时间:2020-10-02 03:46:15 来源:脚本之家 阅读:91 作者:程诺 poi解析Excel文件版本问题解决办法 poi解析E ...

  4. java使用poi实现excel保护工作表实例代码(支持.xls和.xlsx)

    java使用poi实现excel保护工作表,支持.xls和.xlsx类型的excel,代码如下: import java.io.FileInputStream; import java.io.File ...

  5. 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 ...

  6. Java 解析Excel(xls、xlsx两种格式)

    Java 解析Excel(xls.xlsx两种格式) 一.环境 JDK 1.8 二.JAR 1.commons-collections4-4.1.jar 2.poi-3.9-20121203.jar ...

  7. JAVA使用POI操作Excel表,XSSF(xlsx)和HSSF(xls)

    JAVA使用POI操作Excel表,XSSF(xlsx)和HSSF(xls) *** POI的结构: ---*HSSF - 提供读写Microsoft Excel格式档案的功能. ---*XSSF - ...

  8. java解析excel报错,poi解析excel文件报错

    getFileMagic() only operates on streams which support mark(int) 使用 bis 解决 BufferedInputStream bis = ...

  9. java excel row遍历空_用Java巧妙的解析Excel中的POI

    原标题:用Java巧妙的解析Excel中的POI 相信各位小伙伴们,在做Java开发的时候,有时候会需要你用Java语言去解析Excel中的POI,这个时候肯定很多小伙伴们会懵逼,那么究竟是怎么实现的 ...

最新文章

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

热门文章

  1. 猜数字游戏——一个可以无聊到你一直玩的Game
  2. 小红花代表什么_小红花是什么意思
  3. svn更换新仓库地址
  4. 被解放的姜戈04 各取所需
  5. 苹果电脑拷贝文件到u盘很慢_防病毒入侵防误删,爱国者这款U盘值得种草
  6. 常用格式判断(邮箱、电话号码、身份证件)
  7. psm倾向得分匹配法举例_倾向得分匹配法 PSM
  8. 开关电源工作原理详解析
  9. SAP770系统FI模块配置(定义留存收益 科目)
  10. 第一章:随即分析中必会的基础知识