Java使用poi对Execl简单_读_操作

时间:2023-03-09 03:47:58
Java使用poi对Execl简单_读_操作
 public class ReadExecl {

 //    private final String XLSX = ".xlsx"; // 2007以上版本
// private final String XLS = ".xls"; // 2003版本 @Test
public void readExeclTest() throws Exception{
File file = new File("F:/execl/readTest2.xlsx");
InputStream is = new FileInputStream(file); // 读取Execl // String suffix = file.toString().substring(file.toString().lastIndexOf("."),file.toString().length()); // 截取文件的后缀
// Workbook wb = null; // 创建一个工作簿
// if(XLSX.equals(suffix)) // 判断下 Execl 的后缀是那个版本
// wb = new XSSFWorkbook(is);
// else if(XLS.equals(suffix))
// wb = new HSSFWorkbook(is);
// else
// throw new RuntimeException("貌似这不是Execl的后缀,请重新检查喔^_^"); // 如果不是Execl就上抛异常 Workbook wb = WorkbookFactory.create(is); // 万能处理版本问题,如果不用 上面注释的准确度创建,就可以考虑这种方式(其实底层也是那样判定的) Sheet sheet = wb.getSheetAt(0); // 获取一个Execl里面的sheet默认从0开始,也可以通过name来获取wb.getSheet(String name);
FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); // 创建公式计算器(用来判断获取Execl中的数据是什么类型) int firstRow = sheet.getFirstRowNum(); // 获取第一行
int lastRow = sheet.getLastRowNum(); // 获取最后一行 for (int i = firstRow; i <= lastRow; i++) {
Row row = sheet.getRow(i); // 获取当前行
int firstCell = row.getFirstCellNum(); // 获取第一个单元格
int lastCell = row.getLastCellNum(); // 获取最后一个单元格
for(int j = firstCell; j <= lastCell; j++){
Cell cell = row.getCell(j); // 获取单元格
CellValue cellValue = evaluator.evaluate(cell); // 计算当前的单元格是什么数据类型
if(cellValue == null) // 如果execl的单元格是空则继续下次循环
continue;
switch (cellValue.getCellType()) {
case Cell.CELL_TYPE_NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) { // 这里的日期类型会被转换为数字类型,需要判别后区分处理
try {
new SimpleDateFormat("yyyy年MM月dd日").format(new SimpleDateFormat ("EEE MMM dd HH:mm:ss Z yyyy", Locale.UK).parse(cell.getDateCellValue().toString()));
System.out.println("numeric转日期...");
} catch (ParseException e) {
e.printStackTrace();
}
} else {
System.out.println("numeric类型...");
}
break;
case Cell.CELL_TYPE_BOOLEAN:
System.out.println("boolean类型...");
break;
case Cell.CELL_TYPE_STRING:
System.out.println("string类型...");
break;
case Cell.CELL_TYPE_FORMULA:
System.out.println("formula类型...");
break;
case Cell.CELL_TYPE_BLANK:
System.out.println("blank类型...");
break;
case Cell.CELL_TYPE_ERROR:
System.out.println("error类型...");
break;
default:
break;
}
}
} is.close(); // 记得关闭流,释放资源
}
}