1
  • ファイル:100行7列程度のファイルです。XLS 拡張子 (MS Excel 97-2003)。
  • read.xlsx問題:またはを介し​​て R でファイルを読み込むことができません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

あなたが扱っていると思われるタイプのファイルを扱っていないと私に思わせる、あなたが述べた2つのことがあります。

  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"これはテキスト ファイルのように見えますが、 inをread.table使用すると正しく読み取れるというコメントで確認できます。あなたが持っているのは、たまたま接尾辞.xls.

ファイルのサフィックスは、ファイルが意図された形式であることを保証するものではないことに注意してください。はるかに優れた指標は、fileシェル コマンドを実行することです (そのコマンドがオペレーティング システムで利用可能な場合)。ファイル拡張子は、ファイルを開くために使用するアプリケーションを決定するために、GUI によって使用されることがあります。Excel はタブ区切りファイルを読み取ることができるため (また、Excel はおそらくファイルの既定のアプリケーションとして設定されていないため.tsv、より伝統的なファイル拡張子になるため)、.xls拡張子を使用することで、ファイルは (一般に) 開かれます。エクセルで。

要約すると、ファイル名が で終わるからといって、.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 に答える