[BioC] RODBC and odbcConnectExcel
James W. MacDonald
jmacdon at med.umich.edu
Wed Dec 20 20:36:09 CET 2006
Wolfgang Raffelsberger wrote:
> Hi,
>
> I’m using the package RODBC to read data from MS Excel.
>
> In the (special) case of Excel sheet–names containing a space character
> (eg “Feuil 1”), I’m having trouble to access the data in such sheets.
>
>
> Similarly, defining a "print area" in Excel (from a sheet without " " in
> it's name) will give an additional line in sqlTables that is of
> table_type "TABLE", but I can't read it neither. A closer look revealed
> that odbcConnectExcel() reads such sheets with " " in the sheet-name as
> “TABLE” (as it does for "print areas") while sheets without (eg
> “Sheet1”) are read as “SYSTEM_TABLE”. Is this the reason why sqlQuery()
> and sqlFetch() give error messages of the type "table not found on
> channel" ?
RODBC isn't a BioC package, so this isn't the correct place for this
question. I think you will get much better traction on R-Help.
For now, you should note two things.
From ?sqlFetch
Note:
If the table name desired is not a valid SQL name (alphanumeric
plus '_'), use 'sqlQuery' with whatever quoting mechanism your
DBMS vendor provides (e.g. '[ ]' on Microsoft products and
backticks on recent versions of MySQL).
From ?sqlQuery
Usage:
sqlQuery(channel, query, errors = TRUE, ..., rows_at_time = 1)
Arguments:
channel: connection handle as returned by 'odbcConnect'.
query: any valid SQL statement
Your call to sqlQuery below (sqlQuery(channel1, "Feuil 2")) cannot
possibly work (unless 'Feuil 2' is some sort of new-fangled SQL query
;-D). I think you need to come up with a reasonable query here.
Something like
myrawdata <- sqlQuery(channel1, "SELECT * FROM [Feuil 2$]")
You will then have to do some of the cleanup that sqlFetch() does in
order to get a reasonable result. Or you could just extract what you
want instead of the whole sheet.
But BDR on R-Help is really the one to ask.
Best,
Jim
>
>
> Of course one solution would be to rename the Excel-sheets. But I’m
> looking for an automated solution to treat data from an instrument that
> generates data in this format (ie MS Excel with sheet names containing “ “).
>
> Does anybody have an idea how I could read/retrieve the information from
> such sheets who’s names contain “ “ ?
>
> Thank’s in advance,
>
> Wolfgang
>
>
> Here the details :
>
> > channel1 <- odbcConnectExcel("Classeur1.xls")
>
> > sqlTables(channel1)
>
> TABLE_CAT TABLE_SCHEM TABLE_NAME TABLE_TYPE REMARKS
>
> 1 D:\\otherProjects\\TCA\\Sept06\\Classeur1 <NA> Feuil1$ SYSTEM TABLE <NA>
>
> 2 D:\\otherProjects\\TCA\\Sept06\\Classeur1 <NA> noSpaceButVeryLong$
> SYSTEM TABLE <NA>
>
> 3 D:\\otherProjects\\TCA\\Sept06\\Classeur1 <NA> 'Feuil 2$' TABLE <NA>
>
> 4 D:\\otherProjects\\TCA\\Sept06\\Classeur1 <NA> 'Feuil 3 (2)$' TABLE <NA>
>
> 5 D:\\otherProjects\\TCA\\Sept06\\Classeur1 <NA>
> noSpaceButVeryLong$Print_Area TABLE <NA>
>
>
>> sh1.fetch <- sqlFetch(channel1, "Feuil1") # works OK
>
>
>> sh2.fetch <- sqlFetch(channel1, "Feuil 2") # won't work !!
>
> Erreur dans odbcTableExists(channel, sqtable) :
> 'Feuil 2': table not found on channel
>
>> sh2.query <- sqlQuery(channel1, "Feuil 2") # won't work either ..
>
>
>> sh2.query
>
> [1] "[RODBC] ERROR: Could not SQLExecDirect"
> [2] "37000 -3500 [Microsoft][Pilote ODBC Excel] Instruction SQL non
> valide; 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT' ou 'UPDATE' attendus."
>
>
>> sh.prAr <- sqlQuery(channel1, "noSpaceButVeryLong$Print_Area")
>> sh.prAr
>
> [1] "[RODBC] ERROR: Could not SQLExecDirect"
> [2] "37000 -3500 [Microsoft][Pilote ODBC Excel] Instruction SQL non
> valide; 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT' ou 'UPDATE' attendus."
>
>
>> odbcCloseAll()
>
>
>> sessionInfo()
>
> R version 2.4.0 (2006-10-03)
> i386-pc-mingw32
>
> locale:
> LC_COLLATE=French_France.1252;LC_CTYPE=French_France.1252;LC_MONETARY=French_France.1252;LC_NUMERIC=C;LC_TIME=French_France.1252
>
> attached base packages:
> [1] "methods" "stats" "graphics" "grDevices" "utils" "datasets" "tcltk"
> "base"
>
> other attached packages:
> RSQLite DBI RODBC svIO R2HTML svMisc svSocket svIDE
> "0.4-15" "0.1-12" "1.1-7" "0.9-5" "1.58" "0.9-5" "0.9-5" "0.9-5"
>
>
>
>
>
> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
> . . . . .
>
> Wolfgang Raffelsberger, PhD
> Laboratoire de BioInformatique et Génomique Intégratives
> IGBMC
> 1 rue Laurent Fries, 67404 Illkirch Strasbourg, France
> Tel (+33) 388 65 3314 Fax (+33) 388 65 3276
> wolfgang.raffelsberger at igbmc.u-strasbg.fr
>
> _______________________________________________
> Bioconductor mailing list
> Bioconductor at stat.math.ethz.ch
> https://stat.ethz.ch/mailman/listinfo/bioconductor
> Search the archives: http://news.gmane.org/gmane.science.biology.informatics.conductor
--
James W. MacDonald, M.S.
Biostatistician
Affymetrix and cDNA Microarray Core
University of Michigan Cancer Center
1500 E. Medical Center Drive
7410 CCGC
Ann Arbor MI 48109
734-647-5623
**********************************************************
Electronic Mail is not secure, may not be read every day, and should not be used for urgent or sensitive issues.
More information about the Bioconductor
mailing list