在R中读取.xlsx之前强制Excel工作簿评估?
我正在使用在R中读取.xlsx之前强制Excel工作簿评估?,r,excel,r-xlsx,R,Excel,R Xlsx,我正在使用xlsx包中的read.xlsx()阅读Excel工作簿(.xlsx格式)。我的工作簿将日期存储为函数(例如,=日期(1900,1,1)),而不是字符串或1899-12-31之间的小数天(例如,1/1/1900或1) 如果工作簿曾经被打开/评估过,这对于read.xlsx来说不是问题。但其中许多工作簿从未被打开/评估过(它们是由我的数据提供者生成的,不是由Excel生成的)。由于工作簿尚未打开/评估,因此它包含-1,而不是自1899-12-31年以来的实际小数天数(例如,2001年5月
xlsx
包中的read.xlsx()
阅读Excel工作簿(.xlsx格式)。我的工作簿将日期存储为函数(例如,=日期(1900,1,1)
),而不是字符串或1899-12-31之间的小数天(例如,1/1/1900
或1
)
如果工作簿曾经被打开/评估过,这对于read.xlsx
来说不是问题。但其中许多工作簿从未被打开/评估过(它们是由我的数据提供者生成的,不是由Excel生成的)。由于工作簿尚未打开/评估,因此它包含-1,而不是自1899-12-31年以来的实际小数天数(例如,2001年5月25日为37036天)。我学会了这一点。因此,如果我在这些(从未打开过的)工作簿中读到一个日期,我会得到一列-1,它read.xlsx
解释为1899-12-30(即1899-12-31之前的一天)
这里有修复程序吗?我可以触摸工作簿以强制评估吗?是否有一点我可以在
read.xlsx
中先强制求值?我只看到一个colClasses
参数,这似乎不是问题所在?我是否可以避免使用Excel VBA脚本将这些工作簿写入文本?很抱歉,我无法提供任何可复制的代码,但如果您打开Excel工作簿以输入=Date()
,则问题将不存在。使用XLConnect
软件包,您可以使用:
getForceFormulaRecalculation(object,sheet)
要对所有图纸进行计算,请执行以下操作:
getForceFormulaRecalculation(wb, sheet = "*")
如果使用
read.xlsx
找不到执行此操作的方法,暴力方式可能是使用rcom
或RDCOMClient
包以编程方式逐个打开和保存文件。感谢指向XLConnect
包的指针<代码>读取工作表获得了正确的日期(即,首先强制评估),并且对于我的用例来说速度更快。