是否可以通过绕过Save或SaveAs方法来保存word文档c#

时间:2018-01-10 15:43:19

标签: c# winforms vsto word-addins

我有一个MS Word AddIn,它启动一个winform,允许用户指定一些额外的元数据,然后将其另存为xml文件以及指定位置的文档副本。

从独立的Word文档运行时,一切正常,但是将使用的一个区域是在应用程序(EMIS WEB)中启动Word文档的位置。它从本地计算机启动Word的副本,这很好,因为它允许运行AddIn。

当我尝试保存文档时,出现Command Failed.错误。 XML文件没有问题:xml.Save(path + docName + ".xml");

应用程序会提示它自己的“保存”对话框。

'Save' Like Dialog

起初我认为是应用程序从文档中删除焦点因此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文档?有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:1)

想出来,幸运的是没有严格的要求将其保存为.doc.docx所以我选择了.pdf。我使用Document.ExportAsFixedFormat MethodwdExportFormatPDF将应用程序拦截保存命令以将其另存为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);
        }
    }