我有一个MS Word AddIn,它启动一个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);
}
}
然而这没有任何区别,应用程序的对话框仍会弹出,无论我是否单击“确定”或“取消”到对话框,它都不会处理SaveAs命令。
我得出的结论是,应用程序正在拦截Save / SaveAs命令并改为执行自己的操作。
是否可以绕过Save或SaveAs方法保存word文档?有没有办法解决这个问题?
答案 0 :(得分:1)
想出来,幸运的是没有严格的要求将其保存为.doc
或.docx
所以我选择了.pdf
。我使用Document.ExportAsFixedFormat Method和wdExportFormatPDF
将应用程序拦截保存命令以将其另存为PDF。
所以最终的代码看起来像这样,并且有效:
public void saveDoc(string doc)
{
string path = @"\\servername\folder\sub-folder\";
string filename = path + doc + ".pdf";
try
{
this.Application.ActiveDocument.ExportAsFixedFormat(filename, WdExportFormat.wdExportFormatPDF);
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}