我喜欢使用特殊格式解析excel中的单元格,其格式为数据格式字符串为“$”#,## 0 我想在该单元格中获取值但不能这样做,有人可以帮忙吗?
for (Row row : sheet)
{
Cell dataCell = row.getCell(colIndex);
if(dataCell!=null )
{
if( row.getRowNum()==5)
{
System.out.println("Cell Value is::"+dataCell.toString());
}
}
}
答案 0 :(得分:1)
您似乎希望将字符串神奇地格式化为与Excel中的相同,而无需您进行任何编码。您可以在POI中执行此操作,但这不是正常的用例。人们通常希望将数值作为数字,布尔等,并自行处理。
您要找的班级是DataFormatter。你的代码就像是
DataFormatter fmt = new DataFormatter();
for (Row r : sheet) {
for (Cell c : r) {
CellReference cr = new CellRefence(c);
System.out.println("Cell " + cr.formatAsString() + " is " +
fmt.formatCellValue(c) );
}
}
答案 1 :(得分:0)
您必须根据数据类型获取值,而不仅仅是“按字符串键入”。
HSSF示例:
HSSFCell cell = poiFilaActual.getCell(intColActual);
if (cell != null) {
if (HSSFCell.CELL_TYPE_STRING == cell.getCellType()) {
return cell.getRichStringCellValue().toString();
} else if (HSSFCell.CELL_TYPE_BOOLEAN == cell.getCellType()) {
return new String( (cell.getBooleanCellValue() == true ? "true" : "false") );
} else if (HSSFCell.CELL_TYPE_BLANK == cell.getCellType()) {
return "";
} else if (HSSFCell.CELL_TYPE_NUMERIC == cell.getCellType()) {
if(HSSFDateUtil.isCellDateFormatted(cell)){
return ( new SimpleDateFormat("dd/MM/yyyy").format(cell.getDateCellValue()) );
}else{
return new BigDecimal(cell.getNumericCellValue()).toString();
}
}
}
答案 2 :(得分:0)
使用此方法获取单元格中的值。它可以帮助您
private String getCellValue(Cell cell) {
if (cell == null) {
return null;
}
if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
return cell.getStringCellValue();
} else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
return cell.getNumericCellValue() + "";
} else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
return cell.getBooleanCellValue() + "";
}else if(cell.getCellType() == Cell.CELL_TYPE_BLANK){
return cell.getStringCellValue();
}else if(cell.getCellType() == Cell.CELL_TYPE_ERROR){
return cell.getErrorCellValue() + "";
}
else {
return null;
}
}