解析Excel数据常用的方式就是使用POI和JXL工具了,这两种工具使用起来有些类似,这里记录一下使用方式提供个参考

POI使用

File file = new File(filePath);
FileInputStream fis = new FileInputStream(file);
workbook = WorkbookFactory.create(fis);
//poi3.6使用以下方式创建workbook
//workbook = new HSSFWorkbook(fis); //.xls格式
int sheetNum = workbook.getNumberOfSheets();// Sheet的数量
System.out.println("共[" + sheetNum + "]个工作表");
for (int i = 0; i < sheetNum; i++) {
System.out.println("开始读取第[" + (i + 1) + "]个工作表");
Sheet sheet = workbook.getSheetAt(i);// 第i个Sheet
String sheetName = sheet.getSheetName();
System.out.println("工作表名称:" + sheetName);
int rowNum = sheet.getPhysicalNumberOfRows();
for (int j = 0; j < rowNum; j++) {
System.out.println("开始读取第[" + (j + 1) + "]行数据:");
Row row = sheet.getRow(j);
int cellNum = row.getPhysicalNumberOfCells();
for (int k = 0; k < cellNum; k++) {
Cell cell = row.getCell(k);
Object cellValue = null;
//根据单元格类型拿数据
CellType cellType = cell.getCellTypeEnum();
switch (cellType) {
case BOOLEAN:
cellValue = cell.getBooleanCellValue();
break;
case ERROR:
cellValue = cell.getErrorCellValue();
break;
case NUMERIC:
cellValue = cell.getNumericCellValue();
break;
case STRING:
cellValue = cell.getStringCellValue();
break;
default:
break;
} //poi3.6使用以下方式判断单元格类型
/*
switch (cell.getCellType()) {
case Cell.CELL_TYPE_BOOLEAN:
cellValue = cell.getBooleanCellValue();
break;
case Cell.CELL_TYPE_ERROR:
cellValue = cell.getErrorCellValue();
break;
case Cell.CELL_TYPE_NUMERIC:
cellValue = cell.getNumericCellValue();
break;
case Cell.CELL_TYPE_STRING:
cellValue = cell.getStringCellValue();
break;
default:
break;
}
*/ System.out.printf("每个单元格的值:"+cellValue);
}
} }

注意POI版本使用上有些许的不同,poi3.6及以上.xls和.xlsx格式的Excel对应的是不同的workbook 实现类, HSSFWorkbook只能操作excel2003以下版本(.xls),XSSFWorkbook只能操作excel2007以上版本(.xlsx),并且判断单元格类型使用的方法也有些许不同,需要注意下。

JXL的使用

Workbook book = Workbook.getWorkbook(new File(filePath));
// 获得第一个表格对象
Sheet sheet = book.getSheet(0); //这里0代表只解析第一个sheet页
// 拿到表格的行数
int row = sheet.getRows();
// 拿到表格的列数
int col = sheet.getColumns();
for (int j = 0; j < col; j++) {
map = new HashMap<Integer, String>();
for (int i = 0; i < row; i++) {
Cell cell = sheet.getCell(j, i);
String custContent = cell.getContents();
//每个单元格的值
System.out.printf("每个单元格的值:"+custContent);
} /* //判断单元格类型
CellType cellType = cell.getType();
if(cellType == CellType.EMPTY){
cell.getContents() //空值
}else if(cellType == CellType.BOOLEAN){
((BooleanCell) cell).getValue(); //布尔值
}else if(cellType == CellType.BOOLEAN_FORMULA){
((BooleanFormulaCell) cell).getValue(); //布尔值公式
}else if(cellType == CellType.DATE){
((DateCell) cell).getDate(); //日期类
}else if(cellType == CellType.DATE_FORMULA){
((DateFormulaCell)cell).getDate(); //日期公式
}else if(cellType == CellType.NUMBER){
((NumberCell) cell).getValue(); //数字
}else if(cellType == CellType.NUMBER_FORMULA){
((NumberFormulaCell) cell).getValue(); //数字公式
}else if(cellType == CellType.STRING_FORMULA){
((StringFormulaCell) cell).getString(); //字符串公式
}else if(cellType == CellType.ERROR){
((ErrorCell) cell).getContents(); //错误消息
}else if(cellType == CellType.FORMULA_ERROR){
((ErrorFormulaCell) cell).getContents(); //公式错误
}else element.setValue(cell.getContents());
*/

最新文章

  1. Efficiency Office Toolkit Clients
  2. 常用Eclipse快捷方式
  3. caffe问题集锦
  4. Tomcat学习 HttpConnector和HttpProcessor启动流程和线程交互
  5. ing
  6. [Golang]实习最后一天小纪念+并发爬虫小练习
  7. iOS 关于流媒体 的初级认识与使用
  8. LINUX系统怎么关闭防火墙?
  9. 软件开发V型号
  10. JAVA截取字符串的几种方式
  11. 判定程序员等级,HashMap就够了
  12. Jenkins+Git+Maven构建并部署war包到tomcat
  13. syslog-ng日志收集分析服务搭建及配置
  14. GitHub上优秀的Go开源项目
  15. [ZJOI2010]贪吃的老鼠
  16. 把MP3保存到数据库中
  17. Linux环境下网络编程杂谈《转》
  18. Yii2 session的使用方法(3)
  19. Java基础教程(9)--流程控制
  20. n元一维向量向左循环移位i的几种算法

热门文章

  1. Incremental Method
  2. tmux安装与使用
  3. HDU 3364
  4. ListBox item Sort
  5. linux Makefile(中文版1)
  6. 关于前端的margin
  7. TX2-start 6 CPU kernel-开启高功耗模式
  8. 如何释放vector变量
  9. LG3684 [CERC2016]机棚障碍 Hangar Hurdles
  10. wpf 客户端【JDAgent桌面助手】开发详解(三) 瀑布流效果实现与UI虚拟化优化大数据显示