joy*_*tor 137 java excel apache-poi
我有这样的内容的excel文件:
A1:SomeString
A2:2
所有字段都设置为String格式.
当我使用POI在java中读取文件时,它告诉A2是数字单元格格式.
.toString().如何将值读取为字符串?
小智 302
我有同样的问题.我cell.setCellType(Cell.CELL_TYPE_STRING);在读取字符串值之前做了,无论用户如何格式化单元格,都解决了问题.
Gag*_*arr 90
当你问这个问题时,我认为我们没有回到这个课程,但今天有一个简单的答案.
你想要做的是使用DataFormatter类.你传递了一个单元格,它会尽力返回一个字符串,其中包含Excel为该单元格显示的内容.如果你传递一个字符串单元格,你将得到回来的字符串.如果您传递了一个应用了格式规则的数字单元格,它将根据它们格式化数字并返回字符串.
对于您的情况,我假设数字单元格应用了整数格式规则.如果您要求DataFormatter格式化这些单元格,它将返回一个包含整数字符串的字符串.
另外,请注意许多人建议这样做cell.setCellType(Cell.CELL_TYPE_STRING),但Apache POI JavaDocs非常清楚地表明你不应该这样做!执行setCellType调用将失去格式,因为javadocs解释了转换为具有格式化剩余的String的唯一方法是使用DataFormatter类.
Vin*_*ala 48
以下代码适用于任何类型的单元格.
InputStream inp =getClass().getResourceAsStream("filename.xls"));
Workbook wb = WorkbookFactory.create(inp);
DataFormatter objDefaultFormat = new DataFormatter();
FormulaEvaluator objFormulaEvaluator = new HSSFFormulaEvaluator((HSSFWorkbook) wb);
Sheet sheet= wb.getSheetAt(0);
Iterator<Row> objIterator = sheet.rowIterator();
while(objIterator.hasNext()){
Row row = objIterator.next();
Cell cellValue = row.getCell(0);
objFormulaEvaluator.evaluate(cellValue); // This will evaluate the cell, And any type of cell will return string value
String cellValueStr = objDefaultFormat.formatCellValue(cellValue,objFormulaEvaluator);
}
Run Code Online (Sandbox Code Playgroud)
Sta*_*tov 29
在修改单元格类型时,我建议使用以下方法:
if(cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
String str = NumberToTextConverter.toText(cell.getNumericCellValue())
}
Run Code Online (Sandbox Code Playgroud)
NumberToTextConverter可以使用Excel的规则正确地将double值转换为文本而不会丢失精度.
use*_*372 17
正如Poi的JavaDocs(https://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/Cell.html#setCellType%28int%29)中已经提到的那样,不要使用:
cell.setCellType(Cell.CELL_TYPE_STRING);
Run Code Online (Sandbox Code Playgroud)
但使用:
DataFormatter df = new DataFormatter();
String value = df.formatCellValue(cell);
Run Code Online (Sandbox Code Playgroud)
有关http://massapi.com/class/da/DataFormatter.html的更多示例
是的,这很有效
推荐的:
DataFormatter dataFormatter = new DataFormatter();
String value = dataFormatter.formatCellValue(cell);
Run Code Online (Sandbox Code Playgroud)
旧:
cell.setCellType(Cell.CELL_TYPE_STRING);
Run Code Online (Sandbox Code Playgroud)
即使你有从cell公式中检索值的问题,仍然可行.
尝试:
new java.text.DecimalFormat("0").format( cell.getNumericCellValue() )
Run Code Online (Sandbox Code Playgroud)
应正确格式化数字。