Невозможно прочитать в.xls из R

  • Файл: это файл с около 100 строк и 7 столбцов. Расширение XLS (MS Excel 97-2003).
  • Проблема: невозможно прочитать файл с помощью R через read.xlsx или же read.xlsx2,
  • Код, используемый для попытки прочитать файл:

    library(xlsxjars)
    library(rJava)
    library(xlsx) 
    excel <- read.xlsx("File.xls",sheetIndex=1,startRow=1,stringsAsFactor=F)
    
  • Ошибка подсказана:

Ошибка в .jcall ("RJavaTools","Ljava/lang/object;","invokeMethod",cl,: java.lang.IllegalArgumentException: ваш InputStream не был ни потоком OLE2, ни потоком OOXML.

PD: для записи, я пытался прочитать это с read.csv и он читает его, но так как это файл Excel и он не разделен запятыми или точками, R читает его так, как будто все находится в 1 столбце. Может быть, кто-нибудь может предложить способ прочитать это read.csv?

2 ответа

Решение

Вы заявили о двух вещах, которые заставляют меня думать, что вы не имеете дело с типом файла, с которым, как вы думаете, вы имеете дело:

  1. Your InputStream was neither an OLE2 stream, nor an OOXML stream"
    
  2. "Я попытался прочитать его с помощью read.csv(), и он действительно прочитал..."

Если это действительно был файл в формате MS Excel 97-2003, read.csv не работал бы на этом вообще. Ошибка от read.xlsx поддерживает это. Похоже, это текстовый файл, и ваш комментарий, который использует sep="\t" в read.table позволяет правильно читать это подтверждает. У вас есть текстовый файл с разделителями табуляцией, который имеет суффикс .xls,

Следует отметить, что суффикс файла не является гарантией того, что файл имеет предполагаемый формат. Гораздо лучше показатели file команда оболочки на нем (если эта команда доступна в вашей операционной системе). Расширения файлов иногда используются графическими интерфейсами, чтобы определить, какое приложение использовать для открытия файла. Поскольку Excel способен читать файл с разделителями табуляции (и потому что Excel, по-видимому, не установлен в качестве приложения по умолчанию для .tsv файл, который будет более традиционным расширением файла), используя .xls расширение, файл (как правило) будет открыт в Excel.

В итоге, только потому, что имя файла заканчивается на .xls не означает, что это действительно файл формата Excel.

Вы можете использовать эту функцию для чтения электронных таблиц XML, сохраненных в формате 2003 Xls.

          readExcelXML <- 
    function(filename) {
    library(xml2)
    library(tidyverse)
    doc <- read_xml(filename)
    ns <- xml_ns(doc)
    rows <- xml_find_all(doc, paste0(".//ss:Worksheet/ss:Table/ss:Row"), ns = ns)
    values <- lapply(rows, . %>% xml_find_all(".//ss:Cell/ss:Data", ns = ns) %>%                 
    xml_text %>% unlist)

    columnNames <- values[[1]]

    dat <- do.call(rbind.data.frame, c(values[-1], stringsAsFactors = FALSE))
    names(dat) <- columnNames

    dat
    }
Другие вопросы по тегам