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

Is it possible to save a word document by bypassing the Save or SaveAs methods c#

我有一个 MS Word 加载项,它启动一个 winform,它允许用户指定一些额外的元数据,然后将这些元数据与指定位置的文档副本一起保存为 xml 文件。

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

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

应用程序使用它自己的 'save' 对话框进行提示。

起初我以为是应用程序从文档中删除焦点,因此 this.Application.ActiveDocument.SaveAs 失败,因为它不是活动文档。所以我尝试在它处于活动状态时获取 Document 对象并将其传递给 saveDoc 方法,以便我可以将其设置为活动文档,如下所示:

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文档呢?有办法解决这个问题吗?

想通了,幸运的是,没有严格要求将其保存为 .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);
        }
    }