【问题标题】:Force Excel Workbook evaluation before read.xlsx in R?在 R 中的 read.xlsx 之前强制 Excel 工作簿评估?
【发布时间】:2014-01-09 11:55:00
【问题描述】:

我正在阅读 read.xlsx() 来自 xlsx 包的 Excel 工作簿(.xlsx 格式)。我的工作簿将日期存储为函数(例如 =DATE(1900, 1, 1)),而不是从 1899-12-31 开始的字符串或小数天数(例如 1/1/19001)。

如果工作簿曾经被打开/评估过,这对read.xlsx 来说不是问题。但是其中许多工作簿从未打开/评估过(它们是由我的数据提供者生成的,而不是由 Excel 生成的)。因为工作簿尚未打开/评估,它包含 -1 而不是自 1899 年 12 月 31 日以来的实际小数天数(例如,2001 年 5 月 25 日的 37036)。我学到了这个here。因此,如果我在其中一个(从未打开的)工作簿中读取日期,我会得到一列 -1,read.xlsx 将其解释为 1899-12-30(即 1899-12-31 的前一天)。

这里有解决办法吗?我可以touch 一个工作簿来强制评估吗?有什么可以让我先输入read.xlsx 来强制评估吗?我只看到一个colClasses 参数,这似乎不是问题?我可以避免使用 Excel VBA 脚本将这些工作簿写入文本吗?抱歉,我无法提供任何可重现的代码,但如果您打开 Excel 工作簿输入=Date(),则问题不会存在。

【问题讨论】:

  • 如果您找不到使用read.xlsx 的方法来执行此操作,那么暴力方法可能是使用rcomRDCOMClient 包以编程方式逐个打开和保存文件。

标签: r excel r-xlsx


【解决方案1】:

使用XLConnect包,你可以使用:

getForceFormulaRecalculation(object,sheet)

计算所有工作表:

getForceFormulaRecalculation(wb, sheet = "*")

【讨论】:

  • 感谢您提供指向 XLConnect 包的指针。 readWorksheet 得到正确的日期(即,首先强制评估)并且对于我的用例来说更快。
猜你喜欢
  • 2019-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-19
相关资源
最近更新 更多