1

如何更改单元格,使其显示为“一般”类型而不是“科学”类型

这是导致问题的行,getPhoneNumber()返回一个字符串

row.createCell(4).setCellValue(c.getPhoneNumber());

电话号码(字符串)显示为 4.165551234E9,数据在那里,但格式错误。


我尝试将单元格格式设置为数字

row.getCell(4).setCellType(Cell.CELL_TYPE_NUMERIC);

但这会导致 10 位字符串显示为 11 到 165 之间的数字。即 11、16、20、26、13、31、35


我也试过把电话号码解析成很长的

try {
    row.createCell(4).setCellValue(Long.parseLong(c.getPhoneNumber()));
} catch (NumberFormatException e) {
    row.createCell(4);
}

没有 setCellValue(Long) 只有 setCellValue(Double),所以我认为字符串是处理这个问题的正确方法。

4

4 回答 4

1

您可以在您的情况下使用CELL_TYPE_STRING并直接设置您的电话号码的值,如下所示

row.createCell(4).setCellValue(c.getPhoneNumber()); // since getPhoneNumber returns a String

HSSFCell #setCellType接受一个int值,CELL_TYPE_STRING或者CELL_TYPE_NUMERIC是 POI 本身提供的所有静态 int 字段,以适当地设置单元格类型。

于 2013-10-08T05:25:14.570 回答
0

第一次尝试是正确的:

row.createCell(4).setCellValue(c.getPhoneNumber());

输入格式不正确,要从数字类型 Cell 中获取 String phoneNumber ,请使用:

String phone = ((long) r.getCell(4).getNumericCellValue()) + "";
于 2013-10-08T05:37:37.883 回答
0

Apache POI 的行为与 Excel 相同。如果您将一个非常长的数字放入 Excel 中,在默认格式的单元格中,它将按原样存储数字,但以科学格式显示。

您需要做的,这与您在 Excel 中所做的相同,是在单元格上设置格式规则,以告诉 Excel 显示大量数字。

例如,如果我想正确显示英国电话号码,那么我需要让 Excel 使用以下格式字符串格式化单元格:

0###########

或者,如果我想要正常间距:

0##### ### ###

假设后者,我要做的是:

// Do this only once per style
DataFormat df = workbook.createDataFormat()

CellStyle phoneStyle = workbook.createCellStyle();
phoneStyle.setDataFormat( df.getFormat("0##### ### ###") );

....

// Create a cell, set the number, and apply our phone formatting to it
cell.setCellValue(phoneNumber);
cell.setCellStyle(phoneStyle);

或者,您可以将数字存储为字符串,但 excel 往往会为此生闷气,并抱怨您将数字存储为字符串并对此发出警告。但是,它确实让您有机会完全控制空间、布局等

于 2013-10-08T09:26:28.850 回答
0

获取单元格的值时我遇到了同样的问题。我只是将程序中的单元格类型更改为单元格类型字符串,然后就可以了。

于 2014-10-16T17:49:29.187 回答