【发布时间】:2018-01-10 15:43:18
【问题描述】:
我有一个 MS Word 插件,它启动一个 winform,允许用户指定一些额外的元数据,然后将这些元数据与指定位置的文档副本一起保存为 xml 文件。
当从独立的 Word 文档运行时,这一切都可以正常工作,但是将使用的区域之一是在应用程序 (EMIS WEB) 中启动 Word 文档的地方。它从本地计算机启动 Word 的副本,这很好,因为它允许运行 AddIn。
当我尝试保存文档时,我收到 Command Failed. 错误。 XML文件保存没问题:xml.Save(path + docName + ".xml");。
应用程序会用它自己的“保存”对话框提示。
起初我以为是应用程序从文档中移除了焦点,因此this.Application.ActiveDocument.SaveAs 失败了,因为它不是活动文档。因此,我尝试在 Document 对象处于活动状态时获取它并将其传递给 saveDoc 方法,以便我可以将其设置为 Active Document,如下所示:
public void saveDoc(string doc, Word.Document wd)
{
string path = @"\\servername\folder\subfolder\";
object filename = path + doc + ".docx";
try
{
wd.Activate();
this.Application.ActiveDocument.SaveAs(ref filename);
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
然而这并没有什么不同,应用程序的对话框仍然弹出,并且无论我是单击确定还是取消对话框,它都不会处理另存为命令。
我得出的结论是,应用程序正在拦截 Save/SaveAs 命令并做自己的事情。
那么是否可以通过绕过 Save 或 SaveAs 方法来保存 word 文档?有没有办法解决这个问题?
【问题讨论】:
-
FWIW 可以通过使用带有内置命令名称的宏来“劫持”一些/许多 Word 的内置命令,尤其是 pre-Backstage:例如 Sub FileSaveAs 和 Sub FileSave .如果已经完成了类似的事情,那么您将无能为力。很高兴你找到了解决方法:-)
-
@Cindy 很高兴知道谢谢!
标签: c# winforms vsto word-addins