特定のセルを読み取る必要がある Excel スプレッドシートがたくさんあります。すべてのワークブックとワークシートを通過するループを作成しましたが、単純化するために、以下の質問ではループを省略しました。
すべてのワークシートまたはセルにデータが入力されるわけではありませんが、セルが空白の場合、XLConnect は空のデータ フレームを返すため、エラーが発生します。
再現するにxlsx
は、作業ディレクトリに というファイルを作成しますtestFile.xlsx
。で、セルとにSheet1
必要なものを入力し、ファイルを保存して閉じます。次に、以下のコードを実行します。A1
B2
# Load packages
library(XLConnect)
# Define positions to read
positionsToRead = c('A1', 'B2')
# This will work as A1 and B2 have data
data.frame(sapply(positionsToRead, function(x) readWorksheetFromFile("testFile.xlsx", sheet='Sheet1', region=x, header=FALSE)))
# Change positions to read
positionsToRead = c('A1', 'B2', 'C3')
# This will fail, as C3 has no data
data.frame(sapply(positionsToRead, function(x) readWorksheetFromFile("testFile.xlsx", sheet='Sheet1', region=x, header=FALSE)))
最初は次のように返されます。
A1.Col1 B2.Col1
1 data1 data2
2 番目は以下を返します。
Error in data.frame(A1 = list(Col1 = "data1"), B2 = list(Col1 = "data2"), :
arguments imply differing number of rows: 1, 0
これを機能させる方法はありますか?検索したところ、 に機能がXLConnect
あることがわかりましたが、SetMissing
to のような文字列を定義するためのもののようblank
ですNA
。