【发布时间】:2012-05-12 01:47:00
【问题描述】:
我正在使用 gdata 包中的 read.xls() 来阅读 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。 Grothendieck 的建议并获得以下信息。
> k <- count.fields(xls2csv(list.xls[[1]]), sep = ","); k
NULL
> L <- readLines(xls2csv(list.xls[[1]])); L
character(0)
xls2csv() 生成的临时文件是空的,所以现在我无法弄清楚为什么我的countSheets() 调用会返回“第 161 行,第 13 列”错误。
我还按照@Joran 的建议在 Libre Office 中将 .xls 文件转换为 .csv 文件,它转换和读取都很好(即,它在所有 236 行和逻辑 readLines() 输出中计算了 27 个字段)。
更新 2
我应该补充一点,我认为这些 .xls 文件不是由 Excel 生成的(我的来源对它们的来源有点保密),但我不当我在 Libre Office 中打开它们时会收到任何错误或警告。
【问题讨论】:
-
没有 xls 文件就无法判断。我在您的未来看到了一些宝贵的时间来寻找隐藏在 xls 文件中某处的不寻常字符。第一步可能是将其导出为 csv,然后尝试将其读取到 R 中,或者在文本编辑器中打开它并直观地扫描它是否有任何异常。
-
@joran -- 感谢您的指点!我在 Libre Office 中将 .xls 转换为 .csv 并完成转换,我可以使用
read.csv()读取并获取所有行和列的逻辑条目。我可能手动将所有 .xls 转换为 .csv :(.
标签: r