排除 readxl 中的工作表

13 浏览
0 Comments

排除 readxl 中的工作表

我了解XLConnect可以用来将Excel工作表读入R中。例如,下面的代码将读取名为test.xls的工作簿中的第一个工作表到R中。\n

library(XLConnect)
readWorksheetFromFile('test.xls', sheet = 1)

\n我有一个包含多个工作表的Excel工作簿。\n如何将工作簿中的所有工作表导入到R的一个列表中,其中列表的每个元素都是一个给定工作表的数据框,而每个元素的名称与Excel中的工作表名称相对应?

0
0 Comments

问题出现的原因:在使用readxl包读取Excel文件时,无法直接读取所有的工作表(sheet)。

解决方法:使用rio包中的import_list函数可以一行代码导入所有的Excel工作表。使用setclass参数可以将导入的数据转换为tibble格式。如果所有的工作表具有相同的格式,可以设置rbind参数为TRUE来合并它们。另外,import_list函数还可以导入工作表的子集,通过设置which参数为指定的工作表序号。

以下是使用rio包解决这个问题的代码示例:

# 导入所有的Excel工作表

library(rio)

data_list <- import_list("test.xls")

# 使用tidyverse导入并转换为tibble格式

data_list <- import_list("test.xls", setclass = "tbl")

# 合并所有的工作表

data_list <- import_list("test.xls", setclass = "tbl", rbind = TRUE)

# 导入指定的工作表子集

data_list <- import_list("test.xls", which = c(1, 2))

使用rio包中的import_list函数可以方便地导入Excel文件中的所有工作表,并可以根据需要进行格式转换、合并或导入子集。这是解决readxl包无法直接读取所有工作表的最简单的方法。

0
0 Comments

问题出现的原因是使用readxl包时无法读取Excel文件中的特定工作表。解决方法是使用XLConnect包的loadWorkbook函数加载Excel文件,并使用readWorksheet函数读取所有工作表。以下是整理后的文章:

注意,XLConnect的大多数函数已经向量化。这意味着您可以使用一个函数调用读取所有工作表,而无需进行显式的向量化操作:

require(XLConnect)
wb <- loadWorkbook(system.file("demoFiles/mtcars.xlsx", package = "XLConnect"))
lst = readWorksheet(wb, sheet = getSheets(wb))

在XLConnect 0.2-0中,lst已经是一个带有命名的列表。

对我来说,这个方法有效:

require(XLConnect) 
wb <- loadWorkbook("excel.xlsx") 
lst = readWorksheet(wb, sheet = getSheets(wb))

我也是这样做的。对我来说,这个解决方案不起作用,即使文件存在也无法找到。

使用system.file()调用对我也不起作用。

相反,直接使用loadWorkbook("demoFiles/mtcars.xlsx")来加载工作簿。这样可以解决问题。

这是一个保护密码的xlsx文件的最佳答案。

0
0 Comments

问题的出现原因:之前的回答中使用的是XLConnect包来读取Excel文件中的所有sheet,但是XLConnect包需要依赖XLConnectJars包,而安装XLConnectJars包时可能会出现错误,导致无法加载XLConnect包。

解决方法:更新回答中的函数,使用readxl包来读取Excel文件中的所有sheet。readxl包支持xls和xlsx格式的文件,并且不需要额外安装其他软件,可以在Windows、Mac和Linux上使用。更新后的函数是read_excel_allsheets,它可以通过传入文件名的方式来读取Excel文件中的所有sheet,并将每个sheet作为一个data.frame保存在一个以sheet名为名字的命名列表中。在函数中,首先使用excel_sheets函数获取Excel文件中的所有sheet的名称,然后使用read_excel函数读取每个sheet的数据,并将数据保存在一个列表中,最后将列表的名称设置为sheet的名称。更新后的函数可以通过传入文件名的方式来调用,例如read_excel_allsheets("foo.xls")。如果需要将数据保存为tibble而不是data.frame,可以将参数tibble设置为TRUE。

0