如何设置单元格格式为文本

我正在使用Apache-POI 3.14。 我需要将单元格locking为“文本”格式。 我的单元格中的数据可能是全部数字,但仍被视为一个string。 当我写这个单元格时,我这样做:

cell.setCellValue("001"); cell.setCellType(Cell.CELL_TYPE_STRING); 

当我在Excel中打开输出工作簿时,单元格包含正确的值(“001”),并在拐angular处显示一个小的绿色三angular形。 将鼠标hover在感叹号上可显示hover文本The number in this cell is formatted as text or preceded by an apostrophe 。 当我查看单元格格式(右键单击 – >格式单元格)时,“类别”显示为“常规”。 我期望这是“文字”。

当用户通过只input数字修改单元格中的值时,就会出现问题。 由于“类别”是“常规”,因此input值并将其显示为数字,将前导零移除并右alignment。

我怎样才能达到与Excel的“格式单元格”对话框相同的结果?

您可以尝试通过设置单元格格式为文本

 CellStyle cellStyle = wb.createCellStyle(); cellStyle.setDataFormat( createHelper.createDataFormat().getFormat("@")); cell.setCellStyle(cellStyle); 

注意:CellStyles应该重新用于所有可用的单元格,不要为每个单元格创build新单元格。

您还可以尝试使用.xlsx格式的“忽略错误”function,但是对其的支持尚未完全完成,请参阅问题46136和问题58641以了解一些正在进行的讨论。

有关其他信息,另请参阅此MSDN页面

对于HSSF,

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

它只是将整个列样式设置为文本,并将类别设置为文本。

但是,如果您使用的是XSSF格式,则不起作用(我正在使用Apache Poi 3.15并且不适用于我)。 在这种情况下,除了使用上面的代码之外,还可以将样式设置为要作为文本对待的每个单元格:

 cell.setCellStyle(textStyle); 

关于错误,你可以使用

 sheet.addIgnoredErrors(new CellRangeAddress(0,9999,0,9999),IgnoredErrorType.NUMBER_STORED_AS_TEXT ); 

它忽略了NUMBER_STORED_AS_TEXT错误的行0直到9999和列0直到9999,你不会看到它。

我没有办法testing这个,但是你有没有尝试过使用一个模板 – 一个空的excel文件,所有单元格格式化为文本?

看起来OP是在寻求Apache解决scheme。 经过一番search,我发现这个答案:

 HSSFCellStyle style = book.createCellStyle(); style.setDataFormat(BuiltInFormats.getBuiltInFormat("text"));