在 Windows 7 企业版上运行 matlab R2010B
在 matlab 脚本中,我将一堆结果保存到一个 word 文件中,然后最后关闭并退出 word。我使用的代码是:
WordFname = ['BatInfoDoc' sprintf('%0.3f',now) '.doc']; % serialnumbered filenames
WordFile = fullfile(pwd,WordFname);
WordApp = actxserver('Word.Application');
WordDoc = WordApp.Documents.Add;
WordDoc.SaveAs2(WordFile);
....
WordApp.Selection.TypeText([title2 title3 title4 title5 title6]);
WordApp.Selection.TypeParagraph;
最后在脚本的末尾
WordDoc.Close;
WordApp.Quit;
我遇到的问题是,在我的开发过程中,我经常使 matlab 脚本崩溃并最终留下孤立的 WINWORD.EXE 进程,每个进程都对其所写入的文件保持锁定。
到目前为止,我一直在使用 TaskManager 手动一次终止这些进程。经过整个上午的开发,我发现自己有大约 20 个文件无法删除,因为它们被大约 11 个孤立的 WINWORD.EXE 进程锁定!
我的问题: 1)是否有一种优雅的方法来处理文件写入、保存和关闭等,这样当我的脚本在我到达关闭文件并退出单词的部分之前崩溃时,我就不会锁定文件和进程? 2)是否有一种优雅的方法来确定matlab脚本中的不良进程,并从matlab脚本中检查并删除它们?也就是说,我可以对我的 matlab 进行编码,以便它自行清理吗?
几分钟后添加: 顺便说一句,我不想将所有代码放在一个大的 try-catch 中,然后在发现错误后关闭窗口。问题是我确实喜欢在出错时进入 Debug模式,并且捕获的错误不会使我进入 Debug模式。
最佳答案
创建 Wordapp
后,立即使用 c = onCleanup(@()Wordapp.Quit)
。当您的函数退出时,无论是自然退出还是崩溃退出,c
将被删除,并且其函数将执行,从而退出 Word。如果这是脚本的一部分而不是函数,您可以手动删除 c
来退出。
此外 - 在开发/调试时,我会将 Wordapp.Visible
设置为 true
,以便您可以在必要时手动关闭 Word。设置回 false
以进行生产。
关于windows - 如何在matlab中杀死孤立的winword.exe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10838203/