1

read.xls()パッケージからgdata、各ワークブックに1枚のシートがあるExcelワークブックを読むために使用しています。読み取りは次のエラーで失敗します。

> read.xls(list.files[[1]])
Error in read.table(file = file, header = header, sep = sep, quote = quote,  : 
  no lines available in input

エラーがわかりません。sheetCount()次のエラーを返します。

> sheetCount(list.files[[1]])
Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
  line 161 did not have 13 elements

しかし、これは奇妙なことです。ワークブックには27列あるからです。また、行161+/-1または列13+/-1については、異常なことは何もありません。

ワークブック全体で繰り返されるエントリは空白であり、手動で拡張する必要があります(これは、私が読みたい750以上のワークブックには実用的ではありません)。

とを手動で設定quote=''してみquote='\''ましたが、出力が変わりません。read.xls()一部の行が不規則であると見なされるが、他の行は表示されないという私の問題はありますか?ポインタはありますか?(パッケージを試しましたxlsReadWriteが、64ビットのWin 7を使用しており、32ビットシステムでのみ動作します)。

ありがとう!


アップデート

@Gをフォローしました。グロタンディークの提案と以下を取得します。

> k <- count.fields(xls2csv(list.xls[[1]]), sep = ","); k
NULL
> L <- readLines(xls2csv(list.xls[[1]])); L
character(0)

生成される一時ファイルが空であるため、呼び出しで「行161、列13」エラーが返さxls2csv()れる理由がわかりません。countSheets()

また、@ Joranの提案に従い、Libre Officeで.xlsファイルを.csvファイルに変換すると、変換と読み取りが正常に行われます(つまり、236行すべてと論理readLines()出力で27フィールドがカウントされます)。


アップデート2

これらの.xlsファイルはExcelによって生成されたものではない思いますが(私のソースはそれらの出所について少し秘密です)、LibreOfficeで開いたときにエラーや警告は表示されません。

4

3 に答える 3

1

これを試して、何かを示唆しているかどうかを確認してください。

library(gdata)
k <- count.fields(xls2csv("myfile.xls"), sep = ","); k
L <- readLines(xls2csv("myfile.xls")); L
于 2012-05-12T02:34:30.137 に答える
1

私の場合、問題は.xlsから.csvへのPerlスクリプトが失敗することだと思います(これがgdata使用されます)。LibreOfficeが警告なしで.xlsを.csvに変換するため、理由はまだわかりません。Vimで.csvを調べたところ、正常に見えます(つまり、クレイジーな文字はありません)。.xlsは独自のスクリプトによって形成されていないため、Perlスクリプトは失敗すると思います。

LibreOfficeはここで機能するため、最も簡単な解決策はコマンドラインLibreOfficeを使用することです(つまり、Perlベースのツール以外でも機能します)。私はWin7を使用しているので、ディレクトリ内のすべての.xlsを変換する単純な.batファイルを作成しました。

for %%f in (*.xls) do soffice.exe -invisible -convert-to csv "%%f"
于 2012-05-13T21:14:02.190 に答える
1

XLConnectを使用してください!

library(XLConnect)
readWorksheetFromFile(list.files[[1]], 1, useCachedValues=TRUE)
于 2013-07-08T12:23:32.957 に答える