R 从gdata包读取.xls()失败,返回“0”;“输入”中没有可用的行;
我正在使用R 从gdata包读取.xls()失败,返回“0”;“输入”中没有可用的行;,r,R,我正在使用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(list.files[[1]]) Error in scan
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(list.files[[1]])
Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :
line 161 did not have 13 elements
我想不出这个错误sheetCount()
返回以下错误
> read.xls(list.files[[1]])
Error in read.table(file = file, header = header, sep = sep, quote = quote, :
no lines available in input
> 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()
将某些行视为参差不齐的行,而不将其他行视为参差不齐的行?有什么建议吗?(我尝试了xlsreadswrite
软件包,但我使用的是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)
>kl试试这个,看看它是否有什么建议:
library(gdata)
k <- count.fields(xls2csv("myfile.xls"), sep = ","); k
L <- readLines(xls2csv("myfile.xls")); L
库(gdata)
k在我的例子中,我认为问题在于.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"
使用XLConnect
library(XLConnect)
readWorksheetFromFile(list.files[[1]], 1, useCachedValues=TRUE)
没有xls文件就无法判断。我看到在您的未来,您将有机会在xls文件中寻找隐藏在某处的不寻常字符。第一步可能是将一个文件导出为csv,然后尝试将其读入R,或者在文本编辑器中打开它,并目视扫描它以查找任何不寻常的内容。@joran--谢谢你的指针!我在Libre Office中将.xls转换为.csv,转换完成后,我可以使用read.csv()
进行读取,并获取所有行和列的逻辑条目。我可能正在手动将所有.xls转换为.csv:(.感谢指针和新工具!我更新了我的问题,看起来xls2cv()
生成了一个空的.csv文件。但现在我不明白为什么会出现奇怪的readLines()
错误(即关于第161行和第13列).我使用了命令行LibreOffice解决方案,但这是解决问题的最佳方法(我认为这是因为,出于某种原因,Perl脚本无法转换.xls文件,尽管LibO可以)。谢谢!在使用count.fields
和xls2cv
的方法对多页*.xlsx文件失败后,read.xlsx
继续返回“输入中无可用行”错误(尽管有可用行),我尝试了这种方法,结果很好!