1

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

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

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

4

1 回答 1

1

使用XLConnect包,您可以使用:

getForceFormulaRecalculation(object,sheet)

计算所有工作表:

getForceFormulaRecalculation(wb, sheet = "*")
于 2014-01-09T12:04:43.677 回答