当用apache poi读取excel单元时,如何区分字符串和公式?

时间:2014-10-01 16:47:49

标签: apache-poi

我已阅读http://poi.apache.org/spreadsheet/eval.html,但我没有让它工作......

我的工作表中有一列包含以下值:

D+1           (pseudo-formula, to be evaluated in java)
01.01.0001    (string constant)
=A1           (formula where A1 contains pseudo formula 'D+2')
=A2           (formula where A2 contains '13.08.2013')

(对于像“D + 1”这样的字符串,我编写了一个解析器,在今天的日期替换D并将其递增一个。“01.01.0001”是一个神奇的值。“= A3”显然是一个excel公式)< / p>

如何安全地将所有这些值都添加到

的普通旧java字符串中
  • 取消引用excel公式
  • 保留伪公式
  • 将其他所有内容视为字符串

???

所以对于上面的例子,我想得到:

"D+1"
"01.01.0001"
"D+2"
"13.08.2013"

1 个答案:

答案 0 :(得分:1)

如果您手动执行此操作:您需要同时检查getCellType()getCachedFormulaResultType()。该类型将让您计算出它是什么类型的单元格,用于格式化/单元格值提取等。对于公式,当您看到它是一个公式单元格时,您可以获取最后一个评估值及其类型

但是,根据您的需求,我认为可能有一个更简单的方法。我想你可以使用DataFormatter,特别是formatCellValue(Cell)

如果您使用DataFormatter,它将识别类型(包括公式),获取值,获取Excel应用的数字/日期格式规则,并应用它们。你得到一个字符串,这是最接近的Apache POI可以管理Excel中显示的内容,看起来像你想要的