在R中的read.xlsx之前强制执行Excel工作簿?

我正在使用xlsx包中的read.xlsx()来读取Excel工作簿(.xlsx格式)。 我的工作簿将date存储为函数(例如, =DATE(1900, 1, 1) 1/1/1900 =DATE(1900, 1, 1) ),而不是从1/1/1900至12 1 1/1/1900日(例如1/1/19001 )的string或小数天数。

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

这里有修复吗? 我可以touch一个工作簿来强制评估吗? 有没有一点,我可以在read.xlsx翻转read.xlsx强制评估? 我只看到一个colClasses参数,这似乎不是问题? 我可以避免使用Excel VBA脚本将这些工作簿写入文本吗? 对不起,我不能提供任何可重复的代码,但如果您打开一个Excel工作簿input=Date() ,问题将不存在。

使用XLConnect包,您可以使用:

 getForceFormulaRecalculation(object,sheet) 

计算所有表单:

 getForceFormulaRecalculation(wb, sheet = "*")