包XLConnect和xlsx

时间:2017-08-22 13:47:35

标签: r excel list

我想将所有excel表读入R列表df。我使用的代码是:

file <- file.choose()
name <- basename(file)
require(XLConnect)
wb <- XLConnect :: loadWorkbook(name)
lst <- readWorksheet(wb, sheet = getSheets(wb))

但之后,我需要使用包&#39; xlsx&#39;。如果我回去使用上面的代码来读取文件,我会在lst <- readWorksheet(wb, sheet = getSheets(wb))之后收到错误消息:

  

wb $ getNumberOfSheets中的错误:类&#39;工作簿&#39;

的方法未定义

顺便说一句,如果我使用wb <- loadWorkbook(name),我收到了错误消息

  

(函数(classes,fdef,mtable)中的错误:         无法为签名'&#34; jobjRef&#34;,&#34; list&#34;'

找到函数'readWorksheet'的继承方法

任何方法都可以使两个包一起工作,或者,其他方法将多个工作表的excel文件读取到df列表?非常感谢!

1 个答案:

答案 0 :(得分:2)

这里的主要问题是你似乎已经加载了两个具有相同功能名称的包。 xlsxXLConnect都提供了loadWorkbookgetSheets函数。这就是大多数错误来自的地方。 因此,您正在调用loadWorkbookgetSheets并为它们提供参数,这些参数的对象类型不是这些函数所期望的。

您最好只使用其中一个来获取所需的data.frames列表。我建议暂时坚持使用XLConnect,直到您需要xlsx包中的特定内容。

以下是您尝试在上面运行的代码的调整版本:

require(XLConnect)


file_name <- file.choose()
base_name <- basename(file_name)

wb <- XLConnect::loadWorkbook(base_name)
lst <- XLConnect::readWorksheet(wb, sheet=XLConnect::getSheets(wb))

列表lst应包含与工作簿中工作表中的数据相匹配的data.frames。

如果要在新的Excel工作簿中保存data.frames列表,可以使用writeWorksheet功能。如果工作簿尚不存在,则需要先打开工作簿或创建工作簿。然后,您将创建数据所在的工作表名称。此时,您可以将数据框添加到相应的工作表。完成后,您可以保存工作簿。

new_wb = loadWorkbook('aaa.xlsx', create=TRUE)
createSheet(new_wb, names(lst))
writeWorksheet(new_wb, data=lst, sheet=names(lst))
saveWorkbook(new_wb)

我希望这会有所帮助。