代码之家  ›  专栏  ›  技术社区  ›  Joris Meys

使用rodbc读取.xls文件时不使用colname

  •  2
  • Joris Meys  · 技术社区  · 15 年前

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

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

    我的代码的核心是以下函数:

    .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() xssRead Read 包裹。除了名字的问题,原来rodbc不能真正读取带有特殊符号(如斜线)的单元格。格式为“dd/mm/yyyy”的日期刚刚给出了na。

    通过查看sqlfetch、sqlquery和sqlgetresults的源代码,我意识到这个问题在驱动程序中出现的可能性更大。不知何故,工作表的第一行被视为某个列特征,而不是普通单元格。因此,它们不是colname,而是相当于db字段名。这是一个你不能设置的选项…

    1 回复  |  直到 15 年前
        1
  •  1
  •   Dirk is no longer here    15 年前

    您是否可以使用基于Perl的解决方案 gdata 相反?它也很便携…

    推荐文章