我需要使用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用于应用“对齐中心”等文本样式。)答案 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