|
|
|
@ -12,29 +12,46 @@ public class Step5_ReaderExcel {
|
|
|
|
|
|
|
|
|
|
FileInputStream fis = new FileInputStream(filePath);
|
|
|
|
|
Workbook workbook = new XSSFWorkbook(fis);
|
|
|
|
|
Sheet sheet = workbook.getSheetAt(0); // 读取第一个工作表
|
|
|
|
|
// 创建FormulaEvaluator对象
|
|
|
|
|
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
|
|
|
|
|
//遍历前4个工作表
|
|
|
|
|
for (int i = 0; i < 4; i++) {
|
|
|
|
|
Sheet sheet = workbook.getSheetAt(i);
|
|
|
|
|
System.out.println("Sheet Name: " + sheet.getSheetName());
|
|
|
|
|
|
|
|
|
|
for (int rowIndex = 0; rowIndex <= sheet.getLastRowNum(); rowIndex++) {
|
|
|
|
|
Row row = sheet.getRow(rowIndex);
|
|
|
|
|
if (row == null) {
|
|
|
|
|
break;
|
|
|
|
|
// 创建FormulaEvaluator对象
|
|
|
|
|
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
|
|
|
|
|
int rowIndex;
|
|
|
|
|
for (rowIndex = 0; rowIndex <= sheet.getLastRowNum(); rowIndex++) {
|
|
|
|
|
Row row = sheet.getRow(rowIndex);
|
|
|
|
|
if (row == null) break;
|
|
|
|
|
if (row.getRowNum() == 0) continue; // 跳过标题行, 本项目中有标题行
|
|
|
|
|
// 读取表格数据
|
|
|
|
|
for (Cell cell : row) {
|
|
|
|
|
// 如果单元格是公式类型
|
|
|
|
|
if (cell.getCellType() == CellType.FORMULA) {
|
|
|
|
|
// 计算公式结果
|
|
|
|
|
cell.setCellType(CellType.NUMERIC);
|
|
|
|
|
cell.setCellValue(evaluator.evaluate(cell).getNumberValue());
|
|
|
|
|
}
|
|
|
|
|
// 打印单元格数据
|
|
|
|
|
System.out.print(cell + "\t");
|
|
|
|
|
}
|
|
|
|
|
System.out.println();
|
|
|
|
|
}
|
|
|
|
|
if (row.getRowNum() == 0) continue; // 跳过标题行, 本项目中有标题行
|
|
|
|
|
// 读取表格数据
|
|
|
|
|
for (Cell cell : row) {
|
|
|
|
|
// 如果单元格是公式类型
|
|
|
|
|
if (cell.getCellType() == CellType.FORMULA) {
|
|
|
|
|
// 计算公式结果
|
|
|
|
|
cell.setCellType(CellType.NUMERIC);
|
|
|
|
|
cell.setCellValue(evaluator.evaluate(cell).getNumberValue());
|
|
|
|
|
//之所以减1,是因为是在判断为空时才停止,也就是过了真实数据一行后,所以要减1
|
|
|
|
|
System.out.println("第一个表格开始行索引=2,结束行索引=" + (rowIndex - 1));
|
|
|
|
|
|
|
|
|
|
//第二个表格
|
|
|
|
|
//从rowIndex开始,向下面查找,直到第一列中出现文字“自动计算招生数、在校生数”,此行的再下一行就是真正的第二个表格的开始位置
|
|
|
|
|
for (; rowIndex <= sheet.getLastRowNum(); rowIndex++) {
|
|
|
|
|
Row row = sheet.getRow(rowIndex);
|
|
|
|
|
if (row != null && row.getCell(0) != null && row.getCell(0).toString().contains("自动计算招生数、在校生数")) {
|
|
|
|
|
System.out.println("rowIndex=" + rowIndex);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
// 打印单元格数据
|
|
|
|
|
System.out.print(cell + "\t");
|
|
|
|
|
}
|
|
|
|
|
System.out.println();
|
|
|
|
|
break;//先调试第一个表格
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
workbook.close();
|
|
|
|
|
fis.close();
|
|
|
|
|
}
|
|
|
|
|