1
  • 文件:它是一个大约 100 行 7 列的文件。XLS 扩展 (MS Excel 97-2003)。
  • 问题:无法通过 Rread.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

4

2 回答 2

5

您所说的有两件事让我认为您没有处理您认为正在处理的文件类型:

  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"inread.table允许正确读取它的评论确认了它。您所拥有的是一个制表符分隔的文本文件,其后缀为.xls.

应该注意的是,文件的后缀并不能保证文件是声称的格式。一个更好的指标是file在其上运行 shell 命令(如果该命令在您的操作系统上可用)。GUI 有时使用文件扩展名来确定使用哪个应用程序打开文件。由于 Excel 能够读取制表符分隔的文件(并且因为 Excel 可能未设置为.tsv文件的默认应用程序,这将是更传统的文件扩展名),通过使用.xls扩展名,文件将(通常)被打开通过 Excel。

总之,仅仅因为文件名以结尾.xls并不意味着它真的是 Excel 原生格式文件。

于 2014-11-22T22:29:01.723 回答
1

您可以使用此功能来读取以 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
    }
于 2021-01-09T12:03:16.937 回答