Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中读取.xlsx之前强制Excel工作簿评估?_R_Excel_R Xlsx - Fatal编程技术网

在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
包的指针<代码>读取工作表获得了正确的日期(即,首先强制评估),并且对于我的用例来说速度更快。