Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Read all worksheets in an Excel workbook into an R list with data.frames

Tags:

r

excel

xlconnect

I understand that XLConnect can be used to read an Excel worksheet into R. For example, this would read the first worksheet in a workbook called test.xls into R.

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

I have an Excel Workbook with multiple worksheets.

How can all worksheets in a workbook be imported into a list in R where each element of the list is a data.frame for a given sheet, and where the name of each element corresponds to the name of the worksheet in Excel?

like image 784
Jeromy Anglim Avatar asked Oct 18 '12 01:10

Jeromy Anglim


People also ask

How do I read data from multiple Excel sheets in R?

For importing multiple Excel sheets into R, we have to, first install a package in R which is known as readxl. After successfully installing the package, we have to load the package using the library function is R.

Can we read data in Excel sheets using R?

read_excel() function is basically used to import/read an excel file and it can only be accessed after importing of the readxl library in R language..

How do I convert Excel data to data frame in R?

First, we import xlsx package by using the library() function then give the full path of the Excel file to excel_path named variable. To create a dataframe keep extracting columns from the file and combine them into one data frame once done. Program: R.


1 Answers

Updated answer using readxl (22nd June 2015)

Since posting this question the readxl package has been released. It supports both xls and xlsx format. Importantly, in contrast to other excel import packages, it works on Windows, Mac, and Linux without requiring installation of additional software.

So a function for importing all sheets in an Excel workbook would be:

library(readxl)     read_excel_allsheets <- function(filename, tibble = FALSE) {     # I prefer straight data.frames     # but if you like tidyverse tibbles (the default with read_excel)     # then just pass tibble = TRUE     sheets <- readxl::excel_sheets(filename)     x <- lapply(sheets, function(X) readxl::read_excel(filename, sheet = X))     if(!tibble) x <- lapply(x, as.data.frame)     names(x) <- sheets     x } 

This could be called with:

mysheets <- read_excel_allsheets("foo.xls") 

Old Answer

Building on the answer provided by @mnel, here is a simple function that takes an Excel file as an argument and returns each sheet as a data.frame in a named list.

library(XLConnect)  importWorksheets <- function(filename) {     # filename: name of Excel file     workbook <- loadWorkbook(filename)     sheet_names <- getSheets(workbook)     names(sheet_names) <- sheet_names     sheet_list <- lapply(sheet_names, function(.sheet){         readWorksheet(object=workbook, .sheet)}) } 

Thus, it could be called with:

importWorksheets('test.xls') 
like image 107
Jeromy Anglim Avatar answered Oct 04 '22 22:10

Jeromy Anglim