如果單元格所存的內容為函式,則透過poi得到的cell type為Cell.CELL_TYPE_FORMULA;解析時的函式:
switch (cell.getCellType()) {
case Cell.CELL_TYPE_BOOLEAN:
System.out.println(cellValue.getBooleanValue());
break;
case Cell.CELL_TYPE_NUMERIC:
System.out.println(cellValue.getNumberValue());
case Cell.CELL_TYPE_STRING:
System.out.println(cellValue.getStringValue());
case Cell.CELL_TYPE_BLANK:
case Cell.CELL_TYPE_ERROR:
case Cell.CELL_TYPE_FORMULA:
CellValue cellValue = evaluator.evaluate(cell);
switch (cellValue.getCellType()) {
// CELL_TYPE_FORMULA will never happen
}
就是說要進行多一層的判斷,poi會透過其內部實現的函式去解析excel的函式;所以這裡可以解析excel函式,而如果是你自己用VB定義的函式,就需要另外處理了。
如果單元格所存的內容為函式,則透過poi得到的cell type為Cell.CELL_TYPE_FORMULA;解析時的函式:
switch (cell.getCellType()) {
case Cell.CELL_TYPE_BOOLEAN:
System.out.println(cellValue.getBooleanValue());
break;
case Cell.CELL_TYPE_NUMERIC:
System.out.println(cellValue.getNumberValue());
break;
case Cell.CELL_TYPE_STRING:
System.out.println(cellValue.getStringValue());
break;
case Cell.CELL_TYPE_BLANK:
break;
case Cell.CELL_TYPE_ERROR:
break;
case Cell.CELL_TYPE_FORMULA:
CellValue cellValue = evaluator.evaluate(cell);
switch (cellValue.getCellType()) {
case Cell.CELL_TYPE_BOOLEAN:
System.out.println(cellValue.getBooleanValue());
break;
case Cell.CELL_TYPE_NUMERIC:
System.out.println(cellValue.getNumberValue());
break;
case Cell.CELL_TYPE_STRING:
System.out.println(cellValue.getStringValue());
break;
case Cell.CELL_TYPE_BLANK:
break;
case Cell.CELL_TYPE_ERROR:
break;
// CELL_TYPE_FORMULA will never happen
case Cell.CELL_TYPE_FORMULA:
break;
}
}
就是說要進行多一層的判斷,poi會透過其內部實現的函式去解析excel的函式;所以這裡可以解析excel函式,而如果是你自己用VB定義的函式,就需要另外處理了。