2014-11-22 57 views
1
  • 文件:它是一个包含约100行7列的文件。 XLS扩展(MS Excel 97-2003)。
  • 问题:无法通过read.xlsxread.xlsx2读取R中的文件。
  • 代码用于尝试读取文件:无法从R中读入.xls

    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来阅读它的方法?

+0

在'read.csv'中调整'sep'参数或使用'read.table' – 2014-11-22 17:37:41

+0

你会用什么sep?在Excel中,它由列分隔,而不是任何符号... – Victor 2014-11-22 17:38:57

+2

使用空格'sep =“”'或可能的选项卡'sep =“\ t”' – 2014-11-22 17:39:15

回答

4

有你说两件事情,让我觉得你不处理你认为你正在处理的文件类型:

  1. Your InputStream was neither an OLE2 stream, nor an OOXML stream" 
    
  2. “我曾尝试与read.csv阅读(),它并读它......”

如果真的是在MS EXC文件el 97-2003本机格式,read.csv根本就没有任何工作。来自read.xlsx的错误支持这一点。这似乎是一个文本文件,并且您在read.table中使用sep="\t"的评论允许正确读取它以确认它。你有什么是一个标签分离的文本文件,恰好有后缀.xls

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

总之,仅仅因为文件名以.xls结尾并不意味着它确实是一个Excel本机格式文件。

+0

这是一个比我所能给出的更好的解释。 :)你教给我一些东西,而我所做的只是解决眼前的问题。 – 2014-11-22 23:01:11