我想将所有 Excel 工作表读入 R 列表 df。我使用的代码是:
file <- file.choose()
name <- basename(file)
require(XLConnect)
wb <- XLConnect :: loadWorkbook(name)
lst <- readWorksheet(wb, sheet = getSheets(wb))
但是,之后我需要使用包“xlsx”。如果我返回使用上面的代码来读取文件,我会在 lst <- readWorksheet(wb, sheet = getSheets(wb))
之后收到错误消息:
Error in wb$getNumberOfSheets : Method undefined for class 'workbook'
顺便说一句,如果我使用 wb <- loadWorkbook(name)
,我收到错误消息
Error in (function (classes, fdef, mtable) : unable to find an inherited method for function ‘readWorksheet’ for signature ‘"jobjRef", "list"’
任何方法都可以使两个包一起工作,或者其他方法将具有多个工作表的 excel 文件读取到 df 列表?非常感谢!
最佳答案
这里的主要问题是您似乎加载了两个具有相同函数名称的包。 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。
如果您希望将 data.frames 列表保存在新的 Excel 工作簿中,可以使用 writeWorksheet
函数。您需要首先打开工作簿或创建它(如果它尚不存在)。然后,您创建数据将存放的工作表名称。此时,您可以将数据框添加到其相应的工作表中。完成后,您可以保存工作簿。
new_wb = loadWorkbook('aaa.xlsx', create=TRUE)
createSheet(new_wb, names(lst))
writeWorksheet(new_wb, data=lst, sheet=names(lst))
saveWorkbook(new_wb)
我希望这会有所帮助。
关于r - XLConnect 包和 xlsx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45819465/