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

新手上路,请多包涵

我正在使用 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 。当我查看单元格格式时(右键单击 -> 设置单元格格式),“类别”显示为“常规”。我希望这是“文本”。

当用户通过仅输入数字来修改单元格中的值时,就会出现问题。因为“Category”是“General”,所以输入值并显示为数字,删除前导零并右对齐。

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

原文由 Steve H. 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.9k
2 个回答

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

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

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

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

另请参阅 此 MSDN 页面 以获取一些其他信息

原文由 centic 发布,翻译遵循 CC BY-SA 3.0 许可协议

对于 HSSF,

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

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

但是,如果您使用的是 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 错误,您不会看到它。

原文由 Shubhashish Mishra 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题