「重複した」クローズ リクエストを回避するには: Excel の名前付き範囲の読み方を知っています。以下のコードに例を示します。これは、Excel の「実際の」テーブルに関するものです。
Excel 2007 以降には、テーブルの便利な概念があります。範囲をテーブルに変換し、並べ替えや再配置の手間を省くことができます。Excel の範囲内にテーブルを作成すると、既定の名前 (次の例でTabelle1
はドイツ語版TableName
) が付けられますが、テーブルの範囲に単純に名前を付けることもできます ( TableAsRangeName
)。Excel の範囲名エディターのアイコンで示されているように、これら 2 つは異なる方法で扱われているようです。
R からこれらのテーブルを (厳密な意味で) 読み取ることができませんでした。既知の唯一の回避策は、CSV 中間を使用するか、テーブルを通常の名前付き範囲に変換することです。参照; これらは A1 表記に変換されます。
以下の例は、問題を示しています。32/64 ビット ODBC ドライバーと 32/64 ビット Java のさまざまな組み合わせによって、走行距離が異なる場合があります。
# Read Excel Tables (not simply named ranges)
# Test Computer: 64 Bit Windows 7, R 32 bit
# My ODBC drivers are 32 bit
library(RODBC)
# Test file has three ranges
# NonTable Simple named range
# TableName Name of table
# TableAsRangeName Named Range covering the above table
sampleFile = "ExcelTables.xlsx"
if (!file.exists(sampleFile)){
download.file("http://www.menne-biomed.de/uni/ExcelTables.xlsx",sampleFile)
# Or do it manually, if this fails
}
# ODBC
channel = odbcConnectExcel2007(sampleFile)
sqlQuery(channel, "SELECT * from NonTable") # Ok
sqlQuery(channel, "SELECT * from TableName") # Could not find range
sqlQuery(channel, "SELECT * from TableAsRangeName") # Could not find range
close(channel)
# gdata has read.xls, but seems not to support named regions
library(xlsx)
wb = loadWorkbook(sampleFile)
getRanges(wb) # This one fails already with "TableName" does not exist
ws = getSheets(wb)[[1]]
readRange("NonTable",ws) # Invalid range address
readRange("TableName",ws) # Invalid range address
readRange("TableAsRangeName",ws) # Invalid range address
# my machine requires 64 bit for this one; depends on your Java installation
sampleFile = "ExcelTables.xlsx"
library(XLConnect) # requires Java
readNamedRegionFromFile(sampleFile,"NonTable") # OK
readNamedRegionFromFile(sampleFile,"TableName") # "TableName" does not exist
readNamedRegionFromFile(sampleFile,"TableAsRangeName") # NullPointerException
wb <- loadWorkbook(sampleFile)
readNamedRegion(wb,"NonTable") # Ok
readNamedRegion(wb,"TableName") # does not exist
readNamedRegion(wb,"TableAsRangeName") # Null Pointer