Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 从gdata包读取.xls()失败,返回“0”;“输入”中没有可用的行;_R - Fatal编程技术网

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
继续返回“输入中无可用行”错误(尽管有可用行),我尝试了这种方法,结果很好!