一、遇到错误的情形
在用JS打开本地的文件(Microsoft Word)时,如果文件路径带有空格,那么winword命令会将路径错误的解析。JS代码如下:
1 var filePath = "D:/Biview/Corpus/生理学第七版/第一章 绪论.docx"; 2 var openDocObj = new ActiveXObject("WScript.Shell"); 3 openDocObj.Run("winword.exe " + filePath + "");
上面的代码中变量“filePath”中的“第一章 绪论”字符串由于中间有一个空格,所以用winword命令将会导致路径解析错误,最终就无法打开用户指定正确路径的文件。
二、尝试解决方案
1、由于Windows把常用软件的名称和路径记录在注册表里。打开Windows运行的开始菜单,单击运行,输入“winword D:/Biview/Corpus/生理学第七版/第一章 绪论.docx”。可以看到解析的错误路径:
这个错误路径是你的word的安装文件路径,所以你安装的路径不同,这个错误路径也会不同。
2、记得在Java程序中获取带空格路径的文件时,空格表示为“%20”,所以我也将空格替换为“%20”去尝试,输入“winword D:/Biview/Corpus/生理学第七版/第一章%20绪论.docx”,可以看到程序是没有将“%20”转义为空格:
3、经过不断的尝试发现给路径加上引号可以正确的解析空格:
a、不加“\”和磁盘名,输入:“winword "Biview/Corpus/生理学第七版/第一章 绪论.docx"”,默认寻找系统盘用户文件夹下。
b、加“\”不加磁盘名,输入:“winword \"Biview/Corpus/生理学第七版/第一章 绪论.docx"”,默认寻找安装Microsoft Word的磁盘根目录下。
c、加“\”不和磁盘名,输入:“winword D:\"Biview/Corpus/生理学第七版/第一章 绪论.docx"”,默认寻找指定盘符的目录下。
三、最终解决方案
//var filePath = "D:/Biview/Corpus/生理学第七版/第一章 绪论.docx"; //改为: var filePath = "D:\\\"Biview/Corpus/生理学第七版/第一章 绪论.docx\"";
四、测试环境
操作系统:64位和32位window7
Word版本:Microsoft Word 2010
IE版本:IE9
五、总结
1、如果是带空格路径的txt文件在运行里输入“notepad D:\Biview\Corpus\生理学第七版\第一章 绪论.txt”则可以正确打开。
2、“winword”命令之后其他参数
/m宏名:启动Word后运行指定宏,并禁止运行AutoExec宏。
/n:启动Word而不打开任何文档。
/t(空格)文档名:启动Word后打开指定文档作为模板。
/a:禁止启动Word后加载项或载入共用模板,包括Normal。
但如果Word不能正常启动,命令行的方式就会很有帮助,如果由于宏病毒导致不能启动,则可以试试/m;如果是由于加载项所致,则可以试试/a。
Java技术交流、学习、讨论,QQ群:67844123