private List<List<String>> read(Workbook wb) {
List<List<String>> dataLst = new ArrayList<List<String>>();
/** 得到第一个shell */
Sheet sheet = wb.getSheetAt(0);
int totalRows = 0;
/** 得到Excel的行数 */
// totalRows = sheet.getPhysicalNumberOfRows();
totalRows = sheet.getLastRowNum();
/** 循环Excel的行 */
for (int r = 0; r <= totalRows; r++) {
Row row = sheet.getRow(r);
if (row == null) {
continue;
}
int totalCells = 0;
/** 得到Excel的列数 */
// totalCells = row.getPhysicalNumberOfCells();
totalCells = row.getLastCellNum();
List<String> rowLst = new ArrayList<String>();
/** 循环Excel的列 */
for (int c = 0; c < totalCells; c++) {
Cell cell = row.getCell(c);
String cellValue = "";
if (null != cell) {
// 以下是判断数据的类型
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_NUMERIC: // 数字
if (HSSFDateUtil.isCellDateFormatted(cell)) { // 判断是日期类型
SimpleDateFormat dateformat = new SimpleDateFormat("yyyyMMdd");
Date dt = HSSFDateUtil.getJavaDate(cell.getNumericCellValue());// 获取成DATE类型
cellValue = dateformat.format(dt);
} else {
// 存文本,getNumericCellValue()
// 返回的是double,一般是不支持那么大,会出现小数位最后几位不一致
// cell.setCellType(HSSFCell.CELL_TYPE_STRING);
// String strTemp = cell.getStringCellValue();
// cellValue =
// Arith.convertScientificNotation(strTemp);//
// 解决问题:1,科学计数法(如2.6E+10),2,超长小数小数位不一致(如1091.19649281798读取出1091.1964928179796),3,整型变小数(如0读取出0.0)
cellValue = NumberToTextConverter.toText(cell.getNumericCellValue());
}
break;
case HSSFCell.CELL_TYPE_STRING: // 字符串
cellValue = cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean
cellValue = cell.getBooleanCellValue() + "";
break;
case HSSFCell.CELL_TYPE_FORMULA: // 公式
cellValue = cell.getCellFormula() + "";
break;
case HSSFCell.CELL_TYPE_BLANK: // 空值
cellValue = "";
break;
case HSSFCell.CELL_TYPE_ERROR: // 故障
cellValue = "illegal content";
break;
default:
cellValue = "unknown content";
break;
}
}
rowLst.add(cellValue);
}
/** 保存第r行的第c列 */
dataLst.add(rowLst);
}
return dataLst;
}
List<List<String>> dataLst = new ArrayList<List<String>>();
/** 得到第一个shell */
Sheet sheet = wb.getSheetAt(0);
int totalRows = 0;
/** 得到Excel的行数 */
// totalRows = sheet.getPhysicalNumberOfRows();
totalRows = sheet.getLastRowNum();
/** 循环Excel的行 */
for (int r = 0; r <= totalRows; r++) {
Row row = sheet.getRow(r);
if (row == null) {
continue;
}
int totalCells = 0;
/** 得到Excel的列数 */
// totalCells = row.getPhysicalNumberOfCells();
totalCells = row.getLastCellNum();
List<String> rowLst = new ArrayList<String>();
/** 循环Excel的列 */
for (int c = 0; c < totalCells; c++) {
Cell cell = row.getCell(c);
String cellValue = "";
if (null != cell) {
// 以下是判断数据的类型
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_NUMERIC: // 数字
if (HSSFDateUtil.isCellDateFormatted(cell)) { // 判断是日期类型
SimpleDateFormat dateformat = new SimpleDateFormat("yyyyMMdd");
Date dt = HSSFDateUtil.getJavaDate(cell.getNumericCellValue());// 获取成DATE类型
cellValue = dateformat.format(dt);
} else {
// 存文本,getNumericCellValue()
// 返回的是double,一般是不支持那么大,会出现小数位最后几位不一致
// cell.setCellType(HSSFCell.CELL_TYPE_STRING);
// String strTemp = cell.getStringCellValue();
// cellValue =
// Arith.convertScientificNotation(strTemp);//
// 解决问题:1,科学计数法(如2.6E+10),2,超长小数小数位不一致(如1091.19649281798读取出1091.1964928179796),3,整型变小数(如0读取出0.0)
cellValue = NumberToTextConverter.toText(cell.getNumericCellValue());
}
break;
case HSSFCell.CELL_TYPE_STRING: // 字符串
cellValue = cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean
cellValue = cell.getBooleanCellValue() + "";
break;
case HSSFCell.CELL_TYPE_FORMULA: // 公式
cellValue = cell.getCellFormula() + "";
break;
case HSSFCell.CELL_TYPE_BLANK: // 空值
cellValue = "";
break;
case HSSFCell.CELL_TYPE_ERROR: // 故障
cellValue = "illegal content";
break;
default:
cellValue = "unknown content";
break;
}
}
rowLst.add(cellValue);
}
/** 保存第r行的第c列 */
dataLst.add(rowLst);
}
return dataLst;
}