2016-10-18 22 views
2

私はユーザーがファイルをアップロードできる光沢のあるアプリケーションを持っています。このファイルに1つまたは2つのデータシートがあるかどうかによって、機能が異なるはずです。 私はDATA_INがパスであるread.xlsx、とのデータシートをインポート:データシートが存在するかどうかを確認するR

data <-read.xlsx(data_in,1,1,colNames=TRUE) 

だからこれは、ファイルの最初のシートです。 2枚目の用紙は同じ方法でインポートできます。しかし、2枚目の用紙がない場合は、警告を貼るなどして処理したり、別の方法で処理したりしてください。

したがって、2番目のシートがデータファイルに存在するかどうかを確認する方法はありますか?

ありがとうございました!

おかげ

答えて

1

上記の答えうまくあなたの特定の問題の解決策を指摘しています。そのような問題の一般的な解決方法を追加したいだけです。tryCatch()をご覧ください。 これにより、コード内でエラーまたは警告が発生した場合の動作を定義できます。

result <- tryCatch({ 
     # The code you want run 
    }, warning = function(war) { 
     # Is executed if warning encountered 
    }, error = function(err) { 
     # Is executed if error encountered 
    }) 

この例では、2番目のシートを読み込み、エラーが発生した場合に何が起こるべきかを定義できます。

+0

私も実際にこのように好きです。エラーから進んでいくという考えは私にとっては知られていなかったので、私はそれを避けようとしています。代わりに、私はこれが問題をコアにもっと解決すると思います。ありがとう。 – Piet93

3

XLConnectパッケージ内のExcelファイル内のシートの有無を確認するための方法existsSheetがあります。

次試すことができます。

# mtcars xlsx file from demoFiles subfolder of package XLConnect 
demoExcelFile <- system.file("demoFiles/mtcars.xlsx", package = "XLConnect") 

# Load workbook 
wb <- loadWorkbook(demoExcelFile) 

# Check for existence of a worksheet called 'mtcars' 
existsSheet(wb, "mtcars") 

詳細はthisを参照してください:

+0

お返事ありがとうございます@ニシュタヤル。これは便利な方法ですが、この場合はワークシートの名前を知っておく必要があるので、私が思うには最適ではありません。私はどのようにユーザーが自分のワークシートを呼び出すべきかを定義していないし、これはもっとエラーなどにつながる可能性があるので、そうするつもりはない。 – Piet93

3

あなたは、「Excelスプレッドシート内のすべてのシートをリスト」にするためにreadxlパッケージのexcel_sheets機能を使用することができます。ドキュメントから

library(readxl) 
excel_sheets("path/to/excel/file") 

# To load all sheets in a workbook, use lapply 
path <- system.file("extdata/datasets.xls", package = "readxl") 
lapply(excel_sheets(path), read_excel, path = path) 
関連する問題