我有java代码使用apache读取excel文件poi.i有一些要求,我在运行时读取单元格数据时将Cell数据类型设置为String。对于前
之前:
cellData.getStringCellValue() --> "Ramki"
后:
cellData.setCellType(Cell.CELL_TYPE_STRING);
System.out.println("The cell data is: " + cellData.getStringCellValue()); ---> ""
我们可以在运行时更改单元格数据类型。
我正在使用apache POI 3.7
请帮助我。
谢谢, 拉姆金。
答案 0 :(得分:1)
如果我理解正确的话,你所追求的基本上是Excel为每个单元格显示的内容的文本?
如果是这样,您的关键类将DataFormatter为您执行此操作。
如果你看一下POI中的ExcelExtractor课程,你会看到一个完全有效的例子。
HSSFCell cell = row.getCell(k);
switch(cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
text.append(cell.getRichStringCellValue().getString());
break;
case HSSFCell.CELL_TYPE_NUMERIC:
text.append(
_formatter.formatCellValue(cell)
);
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
text.append(cell.getBooleanCellValue());
break;
case HSSFCell.CELL_TYPE_ERROR:
text.append(ErrorEval.getText(cell.getErrorCellValue()));
break;
case HSSFCell.CELL_TYPE_FORMULA:
if(outputCellFormulas) {
text.append(cell.getCellFormula());
} else {
switch(cell.getCachedFormulaResultType()) {
case HSSFCell.CELL_TYPE_STRING:
HSSFRichTextString str = cell.getRichStringCellValue();
if(str != null && str.length() > 0) {
text.append(str.toString());
}
break;
case HSSFCell.CELL_TYPE_NUMERIC:
HSSFCellStyle style = cell.getCellStyle();
if(style == null) {
text.append( cell.getNumericCellValue() );
} else {
text.append(
_formatter.formatRawCellContents(
cell.getNumericCellValue(),
style.getDataFormat(),
style.getDataFormatString()
)
);
}
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
text.append(cell.getBooleanCellValue());
break;
case HSSFCell.CELL_TYPE_ERROR:
text.append(ErrorEval.getText(cell.getErrorCellValue()));
break;
}
}
break;
default:
throw new RuntimeException("Unexpected cell type (" + cell.getCellType() + ")");
}