阅读Excel表格,而不是简单的命名范围

时间:2013-07-16 08:11:08

标签: r excel import

避免“重复”关闭请求:我知道如何读取Excel命名范围;示例在下面的代码中给出。这是关于Excel中的“真实”表。

Excel2007及更高版本具有表格的有用概念:您可以将范围转换为表格,并在排序和重新排列时避免麻烦。在Excel范围内创建表时,它将获得默认名称(德语版中的Tabelle1,以下示例中为TableName),但您还可以简单地命名表的范围({{ 1}});如Excel范围名称编辑器中的图标所示,这两个似乎被区别对待。

我无法从R中读取这些表格(严格意义上)。唯一已知的解决方法是使用CSV中间体,或将表格转换为正常的命名范围,当您使​​用列时会产生令人讨厌的不可逆副作用单元格引用中的名称;这些转换为A1表示法。

以下示例显示了问题。您的里程数可能因32/64位ODBC驱动程序和32/64位Java

的不同组合而有所不同
TableAsRangeName

3 个答案:

答案 0 :(得分:2)

表格定义存储在XML中是正确的。

sampleFile = "ExcelTables.xlsx"
unzip(sampleFile, exdir = 'test')
library(XML)
tData <- xmlParse('test/xl/tables/table1.xml')
tables <- xpathApply(tData, "//*[local-name() = 'table']", xmlAttrs)
[[1]]
            id           name    displayName            ref totalsRowShown 
           "1"    "TableName"    "TableName"        "G1:I4"            "0" 
library(XLConnect)

readWorksheetFromFile(sampleFile, sheet = "ExcelTable", region = tables[[1]]['ref'], header = TRUE)
    Name Age AgeGroup
1  Anton  44        4
2 Bertha  33        3
3  Cäsar  21        2

根据您的具体情况,您可以在XML文件中搜索适当的数量。

答案 1 :(得分:2)

我在 XLConnect 中添加了一些Excel表的初始支持。请在https://github.com/miraisolutions/xlconnect

上找到github上的最新更改

以下是一个小样本:

require(XLConnect)
sampleFile = "ExcelTables.xlsx"
wb = loadWorkbook(sampleFile)
readTable(wb, sheet = "ExcelTable", table = "TableName")

请注意,Excel表格与表格相关联。因此,据我所知,可以将多个具有相同名称的表与不同的表相关联。出于这个原因,sheet有一个readTable - 参数。

答案 2 :(得分:0)

稍后补充:

readxl::readxl可以读取“真实”表格,当您想要读取数据帧/元组时,它可能是最麻烦的解决方案。

** @Jamzy评论后** 我再次尝试,无法读取命名范围。那么假阳性或假阴性现在???