2011-11-18 21 views
7

¿Cuál es la forma más sencilla de convertir una gran hoja de cálculo de Excel con varias hojas de trabajo en archivos .CSV en R?¿Guardar hoja de cálculo de Excel como .csv con R?

Tenga en cuenta que he probado XLConnect y XLSX y que mis hojas de Excel se bloquean. Así que estoy buscando específicamente una solución que no use el paquete XLConnect o XLSX.

+1

¿Por qué no usar excel para convertir a CSV? – Stedy

+5

@Stedy: tal vez la hoja de cálculo de Excel se genera como parte de un proceso periódico automatizado que AME no puede modificar pero con el que todavía tiene que trabajar. Alternativamente, tal vez AME realmente tiene 5,000 de esas hojas de Excel y necesita extraer varias hojas de cada una, pero ya sabe cómo recorrer los archivos. Puedo pensar en una gran cantidad de escenarios en los que la conversión manual se convierte en una pesadilla. –

+0

@MattParker - buen punto – Stedy

Respuesta

5

http://rwiki.sciviews.org/doku.php?id=tips:data-io:ms_windows

EDIT: para hacer frente a la opción read.xlsx:

Si tiene Perl servicio, usted necesita una versión actual de gdata

require(gdata) 
installXLSXsupport() #now the example from help(read.xls) 
    # load the third worksheet, skipping the first two non-data lines... 
    if('XLSX' %in% xlsFormats()) # if XLSX is supported.. 
     data <- read.xls(exampleFile2007, sheet="Sheet with initial text", skip=2) 
data 
#----------------------- 
    X  X.1 D E. F G Factor 
1 NA FirstRow 1 NA NA NA Red 
2 NA SecondRow 2 1 NA NA Green 
3 NA ThirdRow 3 2 1 NA Red 
4 NA FourthRow 4 3 2 1 Black 
#------------------------ 
write.csv(data) 

Esto se hizo en un Mac y Hasta esta pregunta, siempre había tropezado con la etapa installXLSXsupport() ya que siempre recibí un error. Esta vez inicié Perl desde la línea de comandos de la Terminal y obtuve el éxito después de configurar por primera vez mi configuración personal, definir espejos de CPAN en mi continente y dejé Perl en ejecución.

+0

Es un gran recurso, pero creo que su respuesta sería aún mejor si incluyera algún comentario personal sobre las opciones que ha utilizado y sus experiencias con ellas. Es difícil saber por dónde empezar en una lista como esa. –

+0

Incluso como señaló en su comentario, habría sido difícil dar una respuesta adaptada a la situación de los que preguntaban porque no había detalles de tal oferta. Parecía que se requería una respuesta general para responder a una pregunta vaga y con suerte obtener detalles aclaratorios. –

+0

Gracias por el enlace DWin. Esta pregunta en realidad se relaciona con un problema que tuve con los paquetes XLConnect y XLSX que no pueden leer un archivo .xlsx particularmente grande. Si convierto manualmente las hojas de cálculo en un archivo CSV, mi código R funciona bien. Entonces, para automatizar el proceso, necesito usar un paquete R que pueda leer archivos .xlsx grandes y convertirlos en archivos .csv. Después de leer tu referencia, creo que daré una oportunidad a gdata. ¿Me pueden ayudar a descubrir cómo convierto archivos .xlsx usando el paquete "gdata"? – AME

9

Aquí hay un bucle para escribir todas las hojas:

require(gdata) 
## install support for xlsx files 
installXLSXsupport() 
excelFile <- ("/full/path/to/excelFile.xlsx") 
## note that the perl scripts that gdata uses do not cope well will tilde expansion 
## on *nix machines. So use the full path. 
numSheets <- sheetCount(excelFile, verbose=TRUE) 

for (i in 1:numSheets) { 
    mySheet <- read.xls(excelFile, sheet=i) 
    write.csv(mySheet, file=paste(i, "csv", sep="."), row.names=FALSE) 
} 
1

respuesta actualizada basada en paquete readxl.

library("readxl") 

#function to read all sheets of a workbook 
read_excel_allsheets <- function(filename) { 
    sheets <- readxl::excel_sheets(filename) 
    x <- lapply(sheets, function(X) readxl::read_excel(filename, sheet = X)) 
    names(x) <- sheets 
    x 
} 

sheetnames <- read_excel_allsheets("excelFile.xlsx") 
names(sheetnames) 
+0

Simple y recomendado. 'read_excel (archivo)%>% data.table :: fwrite (fileout)' – Rob

Cuestiones relacionadas