2011-08-05 117 views
-1

我有Java代码来读取使用apache poi.i的excel文件有一些要求,我在运行时读取单元格数据时将单元格数据类型设置为字符串。对于前在运行时设置单元格数据类型删除apache poi中的单元格数据

前: cellData.getStringCellValue() --> "Ramki"

后: cellData.setCellType(Cell.CELL_TYPE_STRING); System.out.println("The cell data is: " + cellData.getStringCellValue()); ---> ""

我们可以在运行时更改单元格的数据类型。

我使用的是apache POI 3.7

请帮我解决这个问题。

谢谢, Ramki。

+0

目前尚不清楚您正在尝试做什么以及您遇到什么问题。为什么你将现有的单元格类型设置为字符串? – Gagravarr

+0

我想处理代码中的数字数据和字符串数据。首先我会检查单元格的数据类型是不是数字?如果它不是数字,我想将该单元格类型更改为字符串(不管类型是公式,错误,..等) – Ramki

回答

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() + ")"); 
} 
+0

非常感谢。它帮助我解决了这个问题。 – Ramki

相关问题