【问题标题】:One or more XML expansion packs are available for this file一个或多个 XML 扩展包可用于此文件
【发布时间】:2014-06-27 18:16:21
【问题描述】:

更新:

我现在根据以下答案添加了以下代码:

foreach (Word.XMLSchemaReference reference in Globals.ThisDocument.Application.ActiveDocument.XMLSchemaReferences)
{
    if (reference.NamespaceURI.Contains("ActionsPane"))
    {
        reference.Delete();
    }
}

这在设计时没有给我任何错误,但仍然给用户提供了原始问题中描述的关于选择 xml 扩展包的消息。所以原来的问题还没有解决。

原始问题:

使用 Visual Studio 2013,我创建了一个包含操作窗格的 Word 文档级项目。一切正常。唯一的问题是当有人使用此文档操作窗格将文本插入文档然后保存时会发生什么。下次打开保存的文档时,用户会收到以下消息

One or more XML expansion packs are available for this file.
Choose one from the list below.
No XML expansion pack
Microsoft Actions Pane 3

打开保存的文档时如何防止这种情况发生?

【问题讨论】:

  • 我也在处理这个问题。它似乎因用于打开文档的计算机而异。目前我怀疑这可能与不同版本的 VSTO 有关。

标签: c# .net-4.0 visual-studio-2013 vsto word-2010


【解决方案1】:

您需要检查 word 文档的 XMLSchemaReferences 以查看是否有任何 Xml 架构具有引用操作窗格的命名空间,如果有,请将其删除。

这需要在保存之前完成。

您在打开文档时收到的消息是因为它包含对操作窗格命名空间的架构引用。

类似这样的:

foreach (XMLSchemaReference reference in wordDocument.XMLSchemaReferences)
  {
    if (reference.NamespaceURI.Contains("ActionsPane"))
      {
        reference.Delete();
      }
  }

wordDocument 是您创建的实际 Word 文档。

如果您没有对word文档的引用,而只想使用当前具有焦点的文档,则可以在代码中使用Globals.ThisAddIn.Application.ActiveDocument而不是wordDocument

【讨论】:

  • 我将该代码添加到操作窗格中的按钮单击中,因此在操作窗格创建文档后,将执行您的代码以确保在用户保存文档之前删除引用,但是它给出了以下设计时错误The name 'wordDocument' does not exist in the current context
  • 我提到的 wordDocument 是您创建的实际文档。由于您尚未发布代码,因此我不知道实际名称。所以用包含你的文档的变量替换它。
  • 好的,我得到了代码,但它并没有解决原来的问题。请参阅上面有问题的更新。
【解决方案2】:

我已经使用 Huron answer 解决了我的问题。谢谢休伦。 删除活动文档上的 xmlreference。

就我而言,我在邮件合并事件后删除了我的 xmlreference

void ThisApplication_MailMergeAfterMerge(Word.Document Doc, Word.Document DocResult)
    {
        DocResult.Fields.Update();
        // remove customization
        Office.DocumentProperties properties = (Office.DocumentProperties) DocResult.CustomDocumentProperties;
        properties["_AssemblyName"].Delete();
        properties["_AssemblyLocation"].Delete();
        DocResult.RemoveDocumentInformation(Word.WdRemoveDocInfoType.wdRDIDocumentProperties);


        foreach (XMLSchemaReference reference in DocResult.XMLSchemaReferences)
        {
            if (reference.NamespaceURI.Contains("ActionsPane"))
            {
                reference.Delete();
            }
        }

        ThisApplication.Visible = true;
        ThisApplication.NormalTemplate.Saved = true;
        Doc.MailMerge.DataSource.Close();
    }

【讨论】:

  • 我的代码在操作窗格中,而不是直接在文档本身中,我猜这导致了我的问题。如何从操作窗格中使用它?
  • 好的,我得到了代码,但它并没有解决原来的问题。请参阅上面有问题的更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多