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初始零。 感谢您的发表。 亚历克斯