使用RODBC读取.xls文件时不使用colnames

时间:2010-11-18 17:21:20

标签: excel r xls rodbc

我还有另一个令人费解的问题。

我需要用RODBC读取.xls文件。基本上我需要一张表中所有单元格的矩阵,然后使用greps和strsplits等来获取数据。由于每个工作表包含不同顺序的多个表,以及其中包含其他选项的一些文本字段,因此我需要一些功能类似readLines()的功能,但是需要excel工作表。我相信RODBC是最好的方法。

我的代码的核心是以下功能:

.read.info.default <- function(file,sheet){
    fc <- odbcConnectExcel(file)    # file connection
    tryCatch({
      x <- sqlFetch(fc,
                    sqtable=sheet,
                    as.is=TRUE,
                    colnames=FALSE,
                    rownames=FALSE
           )
      },
      error = function(e) {stop(e)},
      finally=close(fc)
    )

    return(x)
}

然而,无论我尝试过什么,它总是将所提到的工作表的第一行作为返回数据框的变量名。不知道如何解决这个问题。根据文档,colnames=FALSE应该阻止这种情况。

我想避开xlsReadWrite包。编辑:和gdata包。客户端在系统上没有Perl,也不会安装它。


编辑:

我放弃了read.xls()包中的xlsReadWrite。除了名称问题之外,事实证明RODBC无法真正读取带斜线等特殊标志的单元格。格式为“dd / mm / yyyy”的日期只给出了NA。

查看sqlFetch,sqlQuery和sqlGetResults的源代码,我意识到问题很可能在驱动程序中。不知何故,工作表的第一行被视为一些列特征而不是普通单元格。因此,它们不是colnames,而是等同于DB字段名称。这是一个你无法设置的选项......

1 个答案:

答案 0 :(得分:1)

您可以在gdata中使用基于Perl的解决方案吗?这也恰好是便携式的......