12

我需要使用用于电子表格的 Java 库 Apache POI生成一个 .xls (Excel) 文件。

该文件将包含 A 列中的电话号码列表,格式为“0221....”或“+49221...” - 因此 Excel 默认将它们解释为数字单元格。这很糟糕,因为前导 0 或 + 将被修剪。

为了解决这个问题,我可以使用cell.setCellType(Cell.CELL_TYPE_STRING),它工作正常,但仅适用于我为其设置的特定单元格。

如何将此设置应用于整个列(即即使对于所有剩余的单元格,用户将在其中输入其他电话号码)?

在 Excel 中,这是可能的:选择整个列,然后应用单元格类型(该设置在保存/加载文件后仍然存在。)

但我找不到正确的 POI 方法。

  • 首先我假设,它应该类似于sheet.setDefaultCellType(int colNum). 但我找不到这样的东西(可能我只是盲人?库中有很多类似的方法 可以应用文本样式,如“对齐中心”等)
  • 然后我想:也许它只能应用于NamedRange或类似的东西,但我还没有设法弄清楚它是如何工作的......
4

4 回答 4

23

这是一些受 Vlad 回答启发的示例代码:

DataFormat fmt = workbook.createDataFormat();
CellStyle textStyle = workbook.createCellStyle();
textStyle.setDataFormat(fmt.getFormat("@"));
worksheet.setDefaultColumnStyle(0, textStyle);

上面的代码将工作表第一列的默认样式设置为TEXT

谢谢,弗拉德!

于 2013-05-25T01:36:00.177 回答
13

会有帮助吗?

通过使用 @ 符号创建数据格式并在随后传递给 setDefaultColumnStyle() 方法的 CellStyle 对象中使用该格式,可以将列的默认数据类型设置为(在本例中为文本)。我还没有进一步尝试,但我怀疑可以对其他样式对象执行类似的操作,将默认类型设置为数字,甚至自定义格式,例如货币。

于 2011-08-01T12:42:05.140 回答
3

现在使用 POI 设置它的更好方法是使用BuiltinFormats类。

例如:

将列类型转换为数字

 CellStyle numericStyle = workbook.createCellStyle(); 
 numericStyle.setDataFormat(BuiltinFormats.getBuiltinFormat(2)); // 2 For Number 
 worksheet.setDefaultColumnStyle(colId, numericStyle);

BuiltinFormats可以在这里看到完整的格式列表

于 2018-05-24T10:29:40.447 回答
0

弗拉德:这解决了大部分问题。我发现所有空行都按照我想要的方式格式化。但是,我有初始零的行看起来并且工作正常;但是,如果我不得不用另一个从零开始的值更改预先存在的值,那么零就会消失。因此,我建议在单元格中创建值时添加代码以将 setCellStyle 重置为文本。这里有一些片段:方法 public Cell createCell(Row r!, BBjNumber cell, BBjString value!)

c!=#this!.createCell(r!, cell)
c!.setCellValue(value!)
c!.setCellStyle(#text_format!)

方法 c!

#text_format! = #wb!.createCellStyle()
#text_format!.setDataFormat(#format!.getFormat("@"))

方法端

这可能有助于其他一些唯一搜索初始零的人。感谢您的发表。亚历克斯

于 2015-04-03T15:36:15.057 回答