read.xlsx
或read.xlsx2
读取文件。用于尝试读取文件的代码:
library(xlsxjars)
library(rJava)
library(xlsx)
excel <- read.xlsx("File.xls",sheetIndex=1,startRow=1,stringsAsFactor=F)
提示错误:
PD:为了记录,我确实尝试用
.jcall ("RJavaTools","Ljava/lang/object;","invokeMethod",cl,
中的错误:java.lang.IllegalArgumentException:您的InputStream既不是OLE2流,也不是OOXML流。
read.csv
读取它,它确实读了它,但因为它是一个Excel文件并且它没有用逗号或点分隔,所以R读取它就好像一切都在1中柱。也许任何人都可以通过read.csv
建议一种方式来阅读它?
答案 0 :(得分:5)
有两件事你说我认为你没有处理你认为你正在处理的文件类型:
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
shell命令(如果该命令在您的操作系统上可用)。 GUI有时使用文件扩展名来确定用于打开文件的应用程序。由于Excel能够读取制表符分隔文件(并且因为Excel可能不会被设置为.tsv
文件的默认应用程序,这将是更传统的文件扩展名),因此使用.xls
扩展名,文件将(通常)由Excel打开。
总之,仅仅因为文件名以.xls
结尾并不意味着它确实是Excel原生格式文件。
答案 1 :(得分:0)
您可以使用此功能读取以 2003 Xls 格式保存的 XML 电子表格
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
}