我正在使用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=''
和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)
xls2csv()
生成的临时文件为空,所以现在我无法弄清楚为什么我的countSheets()
调用会返回“第161行,第13列”错误。
我也关注了@Joran的建议并将.xls文件转换为Libre Office中的.csv文件,它转换并读取就好了(即,它计算了所有236行中的27个字段和逻辑readLines()
输出)
更新2
我应该补充一点,我认为这些.xls文件不是由Excel生成(我的来源对它们的来源有点保密),但我不知道在Libre Office中打开它们时会收到任何错误或警告。
答案 0 :(得分:1)
试试这个,看看它是否暗示:
library(gdata)
k <- count.fields(xls2csv("myfile.xls"), sep = ","); k
L <- readLines(xls2csv("myfile.xls")); L
答案 1 :(得分:1)
在我的情况下,我认为问题是.xls到.csv Perl脚本失败(这是gdata
使用的)。我仍然不确定为什么因为LibreOffice将.xls转换为.csv而没有任何警告。我用Vim检查了.csv它看起来很正常(即没有疯狂的字符)。我认为.xls由一些专有脚本很难形成,所以Perl脚本失败了。
因为LibreOffice在这里工作,最简单的解决方案是使用命令行LibreOffice(即,不使用基于Perl的工具)。我在Win7上,所以我写了一个简单的.bat文件来转换目录中的每个.xls。
for %%f in (*.xls) do soffice.exe -invisible -convert-to csv "%%f"
答案 2 :(得分:1)
使用XLConnect!
library(XLConnect)
readWorksheetFromFile(list.files[[1]], 1, useCachedValues=TRUE)