R调用excelcnv.exe转.xls为.xlsx报错0x0000142及解决方法
解决R调用excelcnv.exe转换.xls到.xlsx时的0x0000142错误
最近我在写R脚本处理多源数据时遇到个头疼的问题:有个数据源只有.xls格式,R没法直接读取,但转成.xlsx就完全正常。手动在CMD里执行excelcnv.exe命令能顺利完成转换,但用R的system2()函数调用时,系统直接卡顿,最后弹出**excelcnv.exe - 应用程序错误,应用程序无法正常启动(0x0000142)**的提示。
失败的尝试(system2调用)
最开始我用system2()来拼接参数,代码是这样的:
args = c( "C:/Program Files (x86)/Microsoft Office/root/Office16/excelcnv.exe", '-oice', "C:/Users/my_name/OneDrive - work/Documents/Dashboard code/New Code/work_STD_TEMPLATE.xls", "C:/Users/my_name/OneDrive - work/Documents/Dashboard code/New Code/work_STD_TEMPLATE2.xlsx" ) system2(args)
结果就是上面说的,直接报错崩溃。
成功的解决方案(转义后用system调用cmd.exe)
折腾半宿后终于找到了解决办法:需要用转义字符处理路径里的特殊字符,然后通过system()调用cmd.exe来执行命令。关键是要注意两个转义规则:
- 路径里的反斜杠
\要写成\\ - 包含空格的路径需要用双引号包裹,而双引号本身要转义成
\"
最终能用的代码如下:
args = "\"C:\\Program Files (x86)\\Microsoft Office\\root\\Office16\\excelcnv.exe\" -oice \"C:\\Users\\my_name\\OneDrive - work\\Documents\\Dashboard code\\New Code\\work_STD_TEMPLATE.xls\" \"C:\\Users\\my_name\\OneDrive - work\\Documents\\Dashboard code\\New Code\\work_STD_TEMPLATE2.xlsx\"" system("cmd.exe", input = args)
执行这段代码后,excelcnv.exe就能正常运行,顺利完成.xls到.xlsx的转换了。
内容的提问来源于stack exchange,提问作者danishFlint
相关产品推荐
相关产品推荐

