Apache POI for Excel:将整个列的单元格类型设置为“text”

时间:2011-06-28 16:42:25

标签: excel xls apache-poi xlsx

我需要使用Java库Apache POI for spreadsheets生成.xls(Excel)文件。

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

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

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

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

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

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

4 个答案:

答案 0 :(得分:19)

以下是一些受弗拉德回答启发的示例代码:

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

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

谢谢,弗拉德!

答案 1 :(得分:11)

this会帮忙吗?

  

使用@符号创建数据格式并在CellStyle中使用它   然后传递给setDefaultColumnStyle()方法的对象,它是   可以将列的默认数据类型设置为(在本例中为文本)。   我没有进一步经历,但怀疑它是可能做到的   与其他样式对象类似的东西,将默认类型设置为   数字甚至是自定义格式,例如货币。

答案 2 :(得分:0)

维拉德: 这完成了大部分问题。我发现所有空行都按照我想要的方式格式化。然而,我有初始零的行看起来很好;但是如果我不得不用另一个从零开始的值改变一个预先存在的值,则零消失。所以我建议在单元格中创建值时添加代码以将setCellStyle重置为文本。这里有一些片段:   方法public Cell createCell(Row r!,BBjNumber cell,BBjString value!)

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

methodret c!

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

methodend

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

答案 3 :(得分:0)

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

<强>例如

将列类型转换为数字

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

可以看到BuiltinFormats格式的完整列表,here