r - XLConnect 包和 xlsx

标签 r excel list

我想将所有 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 列表?非常感谢!

最佳答案

这里的主要问题是您似乎加载了两个具有相同函数名称的包。 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。

如果您希望将 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/

相关文章:

Excel vba 编译错误 - 参数不可选,

python - 将一个列表除以另一个列表

list - 从每个列表中最佳选择一个元素

vba - 如何在另一个工作表中找到匹配的数据并获取单元格值?

R - 在具有相似名称的多个变量上使用 rbind

r - 在R中,使用具有不同大小和颜色参数的geom_path

python - 将 Plumbr 与在 Python 脚本中使用 R 制作图表的其他选项进行比较

vba - SQL Excel VBA 运行时错误 3709 无效连接

Python 字典数组

r - 使用 ggplot2 的线性判别分析图