2011-11-18 6 views
7

여러 워크 시트가있는 큰 Excel 스프레드 시트를 R의 .CSV 파일로 변환하는 가장 간단한 방법은 무엇입니까?Excel 스프레드 시트를 .csv 파일로 저장 하시겠습니까?

필자는 XLConnect와 XLSX를 테스트 한 결과 내 Excel 시트가 충돌을 일으킨다는 것을 알았습니다. 그래서 저는 특별히 XLConnect 또는 XLSX 패키지를 사용하지 않는 솔루션을 찾고 있습니다.

+1

왜 Excel로 CSV로 변환하지 않습니까? – Stedy

+5

@Stedy - 아마도 Excel 스프레드 시트는 AME가 수정할 수는 없지만 여전히 작업해야하는 자동화 된 주기적 프로세스의 일부로 생성됩니다. 또는 AME에는 실제로 이러한 엑셀 시트가 5,000 개가 있고 각 시트에서 여러 시트를 추출해야하지만 이미 파일을 반복하는 방법을 알고 있습니다. 나는 수동 변환이 악몽이되는 수많은 시나리오를 생각할 수있다. –

+0

@MattParker - 좋은 지적 – Stedy

답변

5

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

편집 : 펄을 실행하는 경우

, 당신은 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) 

이 Mac에서 수행되고 필요 다음 read.xlsx 옵션을 해결하기 항상이 오류가 발생하기 때문에 installXLSXsupport() 단계에서 우연히 만났습니다. 이번에는 Terminal 커맨드 라인에서 Perl을 시작했고, 내 개인 구성을 설정하고, 대륙에서 CPAN 미러를 정의한 후 성공을 거두었으며, 펄을 계속 실행했습니다.

+0

큰 리소스이지만, 사용한 옵션과 경험에 대한 개인적인 논평을 포함하면 답이 더 좋을 것이라고 생각합니다. 그런 목록에서 어디서부터 시작해야할지 알기가 어렵습니다. –

+0

귀하가 귀하의 의견에 언급했듯이, 그러한 제안에 대한 세부 사항이 없기 때문에 질문자 상황에 맞는 대답을 작성하는 것이 어려울 것입니다. 모호한 질문에 답하고 세부 사항을 분명히 밝혀내는 일반적인 응답이 필요한 것 같았습니다. –

+0

DWin 링크를 제공해 주셔서 감사합니다. 이 질문은 실제로 XLConnect 및 XLSX 패키지에서 특히 큰 .xlsx 파일을 읽을 수없는 문제와 관련이 있습니다. 스프레드 시트를 수동으로 CSV 파일로 변환하면 R 코드가 제대로 작동합니다. 따라서 프로세스를 자동화하려면 큰 .xlsx 파일을 읽고 .csv 파일로 변환 할 수있는 R 패키지를 사용해야합니다. 참고 문헌을 읽은 후에는 gdata에게 기회를 줄 것입니다. "gdata"패키지를 사용하여 .xlsx 파일을 변환하는 방법을 알 수 있습니까? – AME

9

여기에 모든 시트를 작성하는 루프입니다 : readxl 패키지를 기반으로

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

업데이트 대답.

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

간단하고 좋습니다. 'read_excel (파일) %> % data.table :: fwrite (파일 출력)' – Rob

관련 문제