由于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. [pytorch][stepbystep]在pytorch上实现卷积神经网路(CNN)的裁剪(purning)
  2. linux cat pdf文件怎么打开,linux下cat 命令使用详解:显示文件内容
  3. 计算机没考好检讨,考试没考好检讨书范文(精选6篇)
  4. python- is和id
  5. maven2中snapshot快照库和release发布库的应用
  6. 真正的大学老师,是那些无需打卡和考评,也会不可遏止地要去读书写作和上课的人...
  7. dubbo consumer 端口_Dubbo普普通通9问
  8. SIP协议栈读书笔记1
  9. 看了这个有趣的例子,你就能秒懂Java中的多线程同步了!
  10. MATLAB中的eps
  11. 【果断收藏】16个经典面试问题及回答思路
  12. diamond简介和搭建
  13. xp怎样修改计算机mac地址,WinXP系统MAC地址修改的方法
  14. HTTP状态码404、413、500
  15. 苹果手机换电池对手机有影响吗_苹果手机换电池去哪里换?这样操作既省钱又省力...
  16. HDU—— 4464 Browsing History
  17. 我为什么不挣钱也要写公众号
  18. ireport怎么实现总计和小计?
  19. VMware环境下修改Centos qcow2格式镜像
  20. 前端:LayUi监听表格单元格,编辑后恢复原数据

热门文章

  1. 关于外部FLASH芯片的初步使用—以M25P80为例
  2. 工程伦理--15.4 异种移植的伦理问题(下)
  3. 对不起,我不再爱你了
  4. android studio模拟器进去就闪退,然后提示unfortunately,xx has stopped
  5. 【技术白皮书】第二章:OCR智能文字识别回顾——自然语言文本发展历程
  6. 【亲爱的安吉维拉】读后感
  7. PCB各层的含义 (solder 和 paste 区别)
  8. 7个关键组件保障小型企业安全在线
  9. 清华计算机系19级研究生状元,全员清华、北大!2019高考状元去向最全统计出炉!...
  10. Transformer课程 业务对话机器人Rasa 3.x Fallback and Human Handoff