我想将所有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列表?非常感谢!
答案 0 :(得分:2)
这里的主要问题是你似乎已经加载了两个具有相同功能名称的包。 xlsx
和XLConnect
都提供了loadWorkbook
和getSheets
函数。这就是大多数错误来自的地方。
因此,您正在调用loadWorkbook
和getSheets
并为它们提供参数,这些参数的对象类型不是这些函数所期望的。
您最好只使用其中一个来获取所需的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)
我希望这会有所帮助。