Apache POI for Excel:将单元格types设置为整个列的“文本”

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

该文件将包含A列中的电话号码列表,格式为“0221 ….”或“+49221 …” – 因此Excel默认将其解释为数字单元格。 这是不好的,因为领先的0或+会被修剪。

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

我怎样才能应用整个列的设置(即使所有的剩余单元格,用户将input额外的电话号码)?

在Excel中,这是可能的 :select整个列,并应用单元格types(设置保存/加载文件仍然存在)。

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

  • 首先我假设,它应该是像sheet.setDefaultCellType(int colNum) 。 但是我找不到像这样的东西(可能我只是瞎了?图书馆有很多类似的方法来应用文本样式,比如“align center”等)
  • 然后我想:也许它只能应用于一个NamedRange或类似的东西,但我还没有设法解决这是如何工作的…

这会有帮助吗?

通过使用@符号创build数据格式,然后在一个CellStyle对象中使用该对象,然后传递给setDefaultColumnStyle()方法,可以将该列的默认数据types设置为(在本例中为文本)。 我还没有进一步实践,但怀疑有可能做一些类似于其他风格的对象来设置默认types为数字,甚至自定义的格式,如货币。

下面是一些由Vlad的答案启发的示例代码:

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

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

谢谢,弗拉德!

弗拉德:这得到了大部分的问题。 我发现所有的空行都按我想要的格式进行了格式化。 但是,我有初始零点的行看起来和工作正常; 然而,如果我不得不用另一个从零开始的值来改变预先存在的值,那么零就消失了。 因此,我build议在单元格中创build值时将代码添加到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

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