使用POI查找单元格的格式

时间:2016-02-14 08:48:23

标签: apache-poi

获取单元格.... other lines .... -vmargs ... other arguments -Dosgi.configuration.area=/directory/directory1/eclipse.eclipse 的正确方法是什么?CellFormatTypeDATENUMBERTEXT)?

GENERAL返回一个Short值,它不会映射到上面的常量。

由于以下原因,我不能只使用cell.getCellStyle.getDataFormat()。对于某些行,值前面可能会有cell.getCellType<>之类的字符串前缀。在这种情况下,>将返回getCellType。因此,获取基础类型的唯一方法似乎是查看列的格式。

由于

1 个答案:

答案 0 :(得分:3)

我不知道从CellCellFormatType的直接路线,但有多种方法可以确定特定类型:

  • 常规? getDataFormat将为0(或更可靠,getDataFormatString将为“常规”)
  • 日期?查看DateUtil.isCellDateFormatted
  • 文本?通常情况下,您需要检查Cell.getCellType = CELL_TYPE_STRING,但由于您说您无法执行此操作(请参阅下面的评论),您还可以尝试检查getDataFormatString是否为“@”或“text”(两者都是纯文本的可能性)
  • 数?同样,通常你只需检查CELL_TYPE_NUMERIC。请注意,日期也被视为数字,因此请先检查日期。

(如果单元格类型为CELL_TYPE_FORMULA,则应检查getCachedFormulaResultType

  

由于以下原因,我不能只使用cell.getCellType。对于某些行,可能有一个字符串前缀,如&lt;&gt;或者&gt;在值

之前

我不熟悉这个问题。也许你有一个自定义格式,它在数字之前加上字符?关于上面的文本检测我的注释可能对你有帮助,但是我建议你仔细检查你的电子表格实际上是否有相关的信息(即重新打开工作表时不只是Excel很聪明):记录单元格键入,格式化和格式化字符串,并确认相关单元格确实存在差异。您的单元格可能实际上被保存为文本,没有区别标记。在这种情况下,您需要为特定场景添加一些特殊的启发式方法。

最后,因为您似乎对来自CellStyle.getDataFormat的返回值感到困惑;它只是表单索引→格式字符串表中的索引。您可以(我通常应该说)使用getDataFormatString直接获取字符串格式。 BuiltinFormats中列出了标准单元格格式,您可以将其用作参考,以查看可能找到的格式字符串(但始终检查格式字符串,而不是ID,否则您将无法正确检测自定义格式)。