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 ...
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. –
@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. –