2011-11-18 18 views
7

複数のワークシートを含む大規模なExcelスプレッドシートをRの.CSVファイルに変換する最も簡単な方法は何ですか?RでExcelスプレッドシートを.csvとして保存しますか?

私はXLConnectとXLSXをテストしたところ、Excelシートがクラッシュすることがわかりました。だから私は特にXLConnectやXLSXパッケージを使わないソリューションを探しています。

+1

なぜExcelを使用してCSVに変換するだけではないのですか? – Stedy

+5

@Stedy - おそらく、Excelスプレッドシートは、AMEが変更できないがまだ動作している自動化された定期的なプロセスの一部として生成されます。あるいは、AMEに実際に5,000枚のExcelシートがあり、それぞれから複数のシートを抽出する必要があるかもしれませんが、ファイルをループする方法はすでに分かっています。私は手動変換が悪夢になる非常に多くのシナリオを考えることができます。 –

+0

@MattParker - 良い点 – Stedy

答えて

5

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

EDIT:read.xlsxオプションに対処する:

あなたが実行しているPerlを持っている場合は、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上で行われたと私はいつもエラーが発生して以来、私はいつもinstallXLSXsupport()ステージで遭遇しました。今回私はTerminalコマンドラインからPerlを起動し、私の個人設定を最初に設定し、大陸でCPANミラーを定義した後に成功を収めました。私はperlを実行していました。

+0

これは素晴らしいリソースですが、使用したオプションや使用経験についての個人的な解説が含まれていれば、あなたの答えはさらに良くなると思います。そのようなリストをどこから始めるべきかを知るのは難しいです。 –

+0

あなたのコメントに書いてあったとしても、そのような申し出の詳細はなかったので、質問者の状況に合わせた回答をするのは難しいでしょう。あいまいな質問に答えるために一般的な対応が求められていたようで、詳細を明らかにするためにはうまくいきました。 –

+0

リンクDWinありがとう。この質問は、実際には、特に大きな.xlsxファイルを読み取ることができないXLConnectパッケージと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(file)%>%data.table :: fwrite(fileout)' – Rob

関連する問題