一个或多个XML扩展包可用于此文件

时间:2014-06-19 08:23:15

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

更新:

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

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

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

2 个答案:

答案 0 :(得分:1)

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

这需要在保存之前完成。

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

这样的事情:

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

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

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

答案 1 :(得分:0)

我用Huron的答案解决了我的问题。谢谢休伦。 删除活动文档上的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();
    }