【问题标题】:Is it possible to save a word document by bypassing the Save or SaveAs methods c#是否可以通过绕过 Save 或 SaveAs 方法来保存 word 文档 c#
【发布时间】: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


【解决方案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);
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 2012-12-23
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    相关资源
    最近更新 更多