Не использовать имена столбцов при чтении файлов .xls с RODBC - PullRequest
2 голосов
/ 18 ноября 2010

У меня есть еще одна загадочная проблема.

Мне нужно читать файлы .xls с помощью RODBC.По сути, мне нужна матрица всех ячеек на одном листе, а затем использовать 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 не может действительно читать ячейки со специальными знаками, такими как косая черта.Дата в формате «дд / мм / гггг» только что дала NA.

Глядя на исходный код sqlFetch, sqlQuery и sqlGetResults, я понял, что проблема, скорее всего, в драйверах.Каким-то образом первая строка листа видна как элемент столбца вместо обычной ячейки.Таким образом, вместо имен столбцов они эквивалентны именам полей БД.И эту опцию вы не можете установить ...

1 Ответ

1 голос
/ 18 ноября 2010

Можете ли вы использовать решение на основе Perl в gdata вместо этого?Это тоже переносимо ...

...