包XLConnect和xlsx
我想读取所有的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))
:
wb $ getNumberOfSheets错误:未定义类“工作簿”的方法
顺便说一句,如果我使用wb <- loadWorkbook(name)
,我得到了错误信息
错误in(function(classes,fdef,mtable):找不到函数'readWorksheet'的签名'jobjRef','list''的inheritance方法'
任何方法可以使两个包一起工作,或者,其他方法来读取多个表的Excel文件到一个DF列表? 非常感谢!
这里的主要问题是,你似乎已经加载了两个具有相同函数名称的包。 xlsx
和XLConnect
都提供了loadWorkbook
和getSheets
函数。 这是你的大部分错误来自哪里。 因此,您正在调用loadWorkbook
和getSheets
并为它们提供这些函数不期望的对象types的参数。
你最好只用其中的一个来获得你想要的data.frames列表。 现在我build议坚持使用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
函数。 您将需要先打开工作簿或创build它,如果它不存在。 然后在数据将要去的地方创build表格名称。 此时,您可以将数据框添加到其相应的工作表。 一旦完成,那么你可以保存工作簿。
new_wb = loadWorkbook('aaa.xlsx', create=TRUE) createSheet(new_wb, names(lst)) writeWorksheet(new_wb, data=lst, sheet=names(lst)) saveWorkbook(new_wb)
我希望这有帮助。