我read.xls()
从gdata
包中使用来阅读 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=''
and 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 的建议将 .xls 文件转换为 Libre Office 中的 .csv 文件,它转换和读取都很好(即,它在所有 236 行和逻辑readLines()
输出中计算了 27 个字段)。
更新 2
我应该补充一点,我认为这些 .xls 文件不是由 Excel 生成的(我的来源对它们的来源有点保密),但是当我在 Libre Office 中打开它们时,我没有收到任何错误或警告。