Невозможно прочитать в.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 ответа
Вы заявили о двух вещах, которые заставляют меня думать, что вы не имеете дело с типом файла, с которым, как вы думаете, вы имеете дело:
Your InputStream was neither an OLE2 stream, nor an OOXML stream"
"Я попытался прочитать его с помощью 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
}