无法从R读取.xls

时间:2014-11-22 17:35:26

标签: r excel csv r-xlsx

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

答案 0 :(得分:5)

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

  1. Your InputStream was neither an OLE2 stream, nor an OOXML stream"
    
  2.   

    “我确实尝试用read.csv()读取它,它确实读了它......”

  3. 如果它确实是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
    }