首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包XLConnect和xlsx

包XLConnect和xlsx
EN

Stack Overflow用户
提问于 2017-08-22 13:47:34
回答 1查看 3.1K关注 0票数 2

我想把所有的excel表格读成一个R列表df。我使用的代码是:

代码语言:javascript
复制
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))之后会收到错误消息。

wb$getNumberOfSheets中的错误:未为类“工作簿”定义的方法

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

错误(函数(类、fdef、mtable):无法为函数‘readWorksheet’找到用于签名‘jobjRef’、‘list’的继承方法

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-22 14:21:19

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

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

下面是您试图在上面运行的代码的经过调整的版本:

代码语言:javascript
复制
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函数。如果工作簿还不存在,您需要首先打开它或创建它。然后创建工作表名,数据将在其中进行。此时,您可以将数据文件添加到相应的表中。一旦完成,您就可以保存工作簿了。

代码语言:javascript
复制
new_wb = loadWorkbook('aaa.xlsx', create=TRUE)
createSheet(new_wb, names(lst))
writeWorksheet(new_wb, data=lst, sheet=names(lst))
saveWorkbook(new_wb)

我希望这能帮到你。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45819465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档