将带有单元格中公式的excel文件读入R

Posted

技术标签:

【中文标题】将带有单元格中公式的excel文件读入R【英文标题】:Read excel file with formulas in cells into R 【发布时间】:2015-08-14 16:29:32 【问题描述】:

我试图将一个 Excel 电子表格读入 R 数据框。但是,某些列具有公式或链接到其他外部电子表格。每当我将电子表格读入 R 时,总会有很多单元格变为 NA。有没有解决这个问题的好方法,以便我可以获得这些单元格的原始值?

我用来导入的R脚本如下:

options(java.parameters = "-Xmx8g")
library(XLConnect)
# Step 1 import the "raw" tab
path_cost = "..."
wb = loadWorkbook(...)
raw = readWorksheet(wb, sheet = '...', header = TRUE, useCachedValues = FALSE)

【问题讨论】:

不一定是您想要的,但您可以在 Excel 中使用复制然后粘贴为值。 问题你说?这取决于您要实现的目标,这在我看来也不清楚。 @SabDeM 我想使用那些单元格中的值,这些单元格的值在原始 excel 文件中可用,但现在变为 NA(不可用) @xyin 好的,请使用这些详细信息更新您的问题,以便用户更好地帮助您,下次尝试提前提供所有详细信息,不要等待用户提出要求。 openexls 非常快,如果您使用的是 Windows,请尝试此操作***.com/questions/46914303/… 【参考方案1】:

更新:来自readxl 包的read_excel 看起来是一个更好的解决方案。它非常快(我在 cmets 中提到的 1400 x 6 文件中为 0.14 秒)并且它在导入之前评估公式。它不使用java,所以不需要设置任何java选项。

 # sheet can be a string (name of sheet) or integer (position of sheet)
 raw = read_excel(file, sheet=sheet)

有关更多信息和示例,请参阅the short vignette。

原始答案: 试试xlsx 包中的read.xlsx。帮助文件暗示默认情况下它会在导入之前评估公式(请参阅keepFormulas 参数)。我在一个小测试文件上检查了这个,它对我有用。公式结果已正确导入,包括依赖于同一工作簿中其他工作表的公式和依赖于同一目录中其他工作簿的公式。

一个警告:如果自上次更新您正在读入 R 的文件上的链接以来,外部链接的工作表发生了变化,则读入 R 中依赖于外部链接的任何值都将是旧值,而不是最新的。

您的情况下的代码是:

library(xlsx)

options(java.parameters = "-Xmx8g") # xlsx also uses java

# Replace file and sheetName with appropriate values for your file
# keepFormulas=FALSE and header=TRUE are the defaults. I added them only for illustration.
raw = read.xlsx(file, sheetName=sheetName, header=TRUE, keepFormulas=FALSE)

【讨论】:

我按照您的代码尝试了 read.xlsx,它非常慢,将近 10 分钟后代码仍在运行。电子表格中有 12378 行,这应该是个问题吗? 我很惊讶使用这么大的纸张会这么慢(你有很多列吗)。试试read.xlsx2。它比read.xlsx 快。有关read.xlsxread.xlsx2 之间的差异,请参阅read.xlsx 帮助。 我刚刚在一个大约 1400 行和 6 列的测试文件上对这两个函数进行了计时。平均读取时间:read.xlsx=5.9 秒; read.xlsx2=0.13 秒。 更正:read.xlsx2 导致 NA 用于带有 formluas 的单元格,因此这不起作用。你需要坚持使用read.xlsx 非常感谢您的帮助!是的,read.xlsx2 确实为带有公式的单元格生成 NA。我有 40 列,我相信这也不是一个大数字。

以上是关于将带有单元格中公式的excel文件读入R的主要内容,如果未能解决你的问题,请参考以下文章

求助EXCEL函数公式 将多列单元格中的数字合并成一组新数据

怎样提取excel单元格中的部分数字

EXCEL函数中直接引单元格中路径

请问如何从Excel一列单元格中,用公式提取唯一值?

如何将带有 NaN 的合并 Excel 单元格读入 Pandas DataFrame

excel怎么使用公式引用单元格