【发布时间】:2014-01-09 11:55:00
【问题描述】:
我正在阅读 read.xlsx() 来自 xlsx 包的 Excel 工作簿(.xlsx 格式)。我的工作簿将日期存储为函数(例如 =DATE(1900, 1, 1)),而不是从 1899-12-31 开始的字符串或小数天数(例如 1/1/1900 或 1)。
如果工作簿曾经被打开/评估过,这对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的方法来执行此操作,那么暴力方法可能是使用rcom或RDCOMClient包以编程方式逐个打开和保存文件。