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

2022-09-03 17:58:24

我使用的是Apache-POI 3.14。我需要将单元格锁定为“文本”格式。我的单元格中的数据可能都是数字,但它仍然被视为字符串。当我编写单元格时,我这样做:

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

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

当用户通过仅输入数字来修改单元格中的值时,就会出现问题。由于“类别”是“常规”,因此输入该值并将其显示为数字,删除前导零并右对齐。

如何获得与Excel的“设置单元格格式”对话框相同的结果?


答案 1

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

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

注意:单元格样式应重新用于所有适用的单元格,不要为每个单元格创建新单元格。

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

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


答案 2

对于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 );

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


推荐