最近工作中用到Java读取Execl中的数据,相比于txt,csv等,Execl显得有点复杂,在这里记录下来,记性不好怕忘记,这里主要用到的是poi这种方式。
项目中用到的Jar包在这就不上传了,详见截图吧
Execl因版本不同有xlsx和xls格式,对此要分开处理,其程序的主要代码如下:
try {
InputStream in = new FileInputStream(filePath);
type = filename.substring(filename.lastIndexOf(".") + 1).trim();//取得文件后缀名
Workbook wb = null;
if ("xlsx".equals(type)) {
wb = new XSSFWorkbook(in);// Excel 2007
} else if ("xls".equals(type)) {
wb = (Workbook) new HSSFWorkbook(in);// Excel 2003
}
Sheet sheet = wb.getSheetAt(0);// 获取文件的第一个工作表
Row row = null;
Cell cell = null;
int totalRows = sheet.getPhysicalNumberOfRows();// 总行数
int totalCells = sheet.getRow(0).getPhysicalNumberOfCells();// 总列数
FormulaEvaluator evaluator = wb.getCreationHelper()
.createFormulaEvaluator();
for (int i = 1; i < totalRows; i++) {
List<String> celllist = new ArrayList<String>();
row = sheet.getRow(i);
Object cellValue = null;
for (int k = 0; k < totalCells; k++) {
cell = row.getCell(k);
if (null != cell) {
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_NUMERIC: // 数字
cellValue = 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: // 公式
evaluator.evaluateFormulaCell(cell);
cellValue = cell.getNumericCellValue();
break;
case HSSFCell.CELL_TYPE_BLANK: // 空值
cellValue = "";
break;
case HSSFCell.CELL_TYPE_ERROR: // 故障
cellValue = "非法字符";
break;
default:
cellValue = "未知类型";
break;
}
} else {
cellValue = "";
}
if(cell.getCellType() == 0){ //判断是否为数字格式避免出现 9变为9.0
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cellValue = cell.getStringCellValue();
}
celllist.add(cellValue+"");