C# 是否可以绕过save或SaveAs方法c保存word文档

C# 是否可以绕过save或SaveAs方法c保存word文档,c#,winforms,vsto,word-addins,C#,Winforms,Vsto,Word Addins,我有一个MS Word插件,它启动一个winform,允许用户指定一些附加元数据,然后将这些元数据与文档副本一起保存在指定位置的xml文件中 当从一个独立的Word文档运行时,这一切都可以很好地工作,但是这将使用的一个区域是在应用程序EMIS WEB中启动Word文档的位置。它从本地计算机启动Word的副本,这很好,因为它允许运行加载项 当我试图保存文档时,收到一条命令失败。错误XML文件保存没有问题:XML.Savepath+docName+.XML 应用程序使用自己的类似“保存”的对话框进行

我有一个MS Word插件,它启动一个winform,允许用户指定一些附加元数据,然后将这些元数据与文档副本一起保存在指定位置的xml文件中

当从一个独立的Word文档运行时,这一切都可以很好地工作,但是这将使用的一个区域是在应用程序EMIS WEB中启动Word文档的位置。它从本地计算机启动Word的副本,这很好,因为它允许运行加载项

当我试图保存文档时,收到一条命令失败。错误XML文件保存没有问题:XML.Savepath+docName+.XML

应用程序使用自己的类似“保存”的对话框进行提示

起初,我认为是应用程序从文档中删除了焦点,因此this.application.ActiveDocument.SaveAs失败,因为它不是活动文档。因此,我尝试在文档对象处于活动状态时获取它,并将其传递给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);
    }
}
但是这并没有什么区别,应用程序的对话框仍然会弹出,无论我单击对话框的“确定”还是“取消”,它都不会处理SaveAs命令

我得出的结论是,应用程序正在拦截Save/SaveAs命令,并执行自己的操作


那么,是否可以绕过save或SaveAs方法来保存word文档?有办法解决这个问题吗?

找到了答案,幸运的是没有严格的要求将其保存为.doc或.docx,所以我选择了.pdf。通过使用with wdExportFormatPDF将其保存为PDF,我已经绕过了截取Save命令的应用程序

最后的代码是这样的,它起到了很好的作用:

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);
        }
    }

FWIW通过使用带有内置命令名称的宏(例如Sub-FileSaveAs和Sub-FileSave),可以劫持Word的一些/许多内置命令,尤其是后台之前的命令。如果这样做了,你就无能为力了。很高兴你找到了解决办法:-@Cindy很高兴知道,谢谢!