2010-11-18 3 views
2

J'ai un autre problème.Ne pas utiliser colnames lors de la lecture de fichiers .xls avec RODBC

J'ai besoin de lire les fichiers .xls avec RODBC. Fondamentalement, j'ai besoin d'une matrice de toutes les cellules dans une feuille, puis utiliser greps et strsplits etc pour obtenir les données. Comme chaque feuille contient plusieurs tableaux dans un ordre différent, et certains champs de texte avec d'autres options entre, j'ai besoin de quelque chose qui fonctionne comme readLines(), mais ensuite pour les feuilles Excel. Je crois que RODBC est le meilleur moyen de le faire.

Le cœur de mon code est fonction suivante:

.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) 
} 

Et pourtant, tout ce que j'ai essayé, il faut toujours la première ligne de la feuille mentionnée comme les noms de variables de la trame de données renvoyées. Aucune idée de comment l'obtenir. Selon la documentation, colnames=FALSE devrait empêcher cela. Je souhaite éviter le package xlsReadWrite. Edit: et le package gdata. Le client n'a pas Perl sur le système et ne l'installera pas.


Edit:

J'ai abandonné et je suis allé avec read.xls() du paquet xlsReadWrite. En dehors du problème de nom, il s'est avéré que RODBC ne peut pas vraiment lire les cellules avec des signes spéciaux comme des barres obliques. Une date au format "jj/mm/aaaa" vient de donner NA. En regardant le code source de sqlFetch, sqlQuery et sqlGetResults, j'ai réalisé que le problème est plus que probable dans les pilotes. D'une manière ou d'une autre, la première ligne de la feuille est vue comme une caractéristique de colonne au lieu d'une cellule ordinaire. Ainsi, au lieu de colnames, ils sont équivalents aux noms de champs de base de données. Et c'est une option que vous ne pouvez pas définir ...

+0

J'ai aussi eu ce problème. La façon dont je l'ai traité était d'écrire un code de manipulation après le fait de laisser tomber les données fictives et de renommer les colonnes. –

+0

@Brandon: C'est ce que j'ai fait aussi, mais c'est encore un peu bête que je dois le faire de cette façon. –

Répondre

1

Pouvez-vous utiliser la solution basée sur Perl dans le gdata à la place? Cela arrive à être portable aussi ...

+0

Hélas, tu te souviens de ce client où je dois même m'assurer que R n'a pas besoin de se connecter à Internet? Pas moyen qu'ils me permettent d'ajouter Perl à l'ensemble ... –

+1

Appel du bluff. Excel peut aussi --- alors qui s'en soucie. Il est temps d'avoir des clients plus intelligents? –

+0

doit faire attention à ce que je dis ici, mais gardons un léger désaccord entre moi et le professeur principal sur les tâches d'un consultant en statistique académique. De plus, j'espère les convaincre d'utiliser réellement la base de données qu'ils ont. En ce moment, ils tirent les feuilles d'Excel, imaginez. * Facepalm * –

Questions connexes