2011-06-28 62 views
8

我需要使用Java库Apache POI for spreadsheets生成.xls(Excel)文件。Apache POI for Excel:将单元格类型设置为整个列的“文本”

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

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

我该如何应用整个列的设置(即使对于所有剩余的单元格,用户将输入额外的电话号码)?

在Excel中,这是可能的:选择整列,并应用细胞类型(设置保存后生还/加载的文件。)

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

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

回答

10

请问this有帮助吗?

通过创建以@符号的数据格式,并使用在一个CellStyle 对象,然后将其传递给setDefaultColumnStyle()方法,它是 可以设置列的默认数据类型,在这种情况下,文字。 我还没有进一步实践,但怀疑有可能做 类似的其他风格的对象设置默认类型为 数字或甚至自定义的格式,如货币。

+0

看起来不错!一旦我回到项目中,我会尝试这个解决方案。谢谢! –

+0

This Works ... Thanks! – jahroy

+0

我也这么做了。 var cllstyl = this.Workbook.CreateCellStyle(); var workbook = new HSSFWorkbook(); var currDataFormat = workbook.CreateDataFormat(); cllstyl.DataFormat = currDataFormat.GetFormat(“@”); sheet.SetDefaultColumnStyle(1,cllstyl);但它不显示“文本”格式,而是显示“日期”。请帮助我。 –

16

这里的弗拉德的回答启发一些示例代码:

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

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

谢谢,弗拉德!

+4

+1显示实际的代码。 – Magnilex

+0

非常感谢你,它为我工作:) –

0

Vlad: 这使得大部分问题得以解决。我发现所有空行都按照我想要的格式进行了格式化。然而,我有初始零点的行看起来并且工作得很好;然而,如果我不得不用另一个从零开始的值来更改预先存在的值,则零消失。因此,我建议在单元格中创建值以将setCellStyle重置为文本时添加代码。这里有一些片段: 方法public细胞createCell(行r!BBjNumber细胞,BBjString值!)

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

methodret!C

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

methodend

这可能有助于初始零一些其他的唯一搜索。 谢谢发布。 Alex

相关问题