После удаления документа WebExtensionPart из WordprocessingDocument документ повреждается

Я новичок в открытии xml sdk, и я не очень понимаю, как работают отношения для документа обработки текста. Я хочу удалить панель веб-задач из моего существующего документа, который содержит панель веб-задач и добавлен программно.

После удаления WebExtensionPart из WordprocessingDocument с помощью open office xml.

Результат: документ поврежден. Причина: часть отношения существует после удаления WebExtensionPart.

Код :

public static void RemoveTaskPaneExt(WordprocessingDocument package)
    {
        WebExTaskpanesPart webExTaskpanesPart1 = package.GetPartsOfType<WebExTaskpanesPart>().FirstOrDefault();

        if (webExTaskpanesPart1 != null)
        {
            WebExtensionPart aWebExtension =
                webExTaskpanesPart1.GetPartsOfType<WebExtensionPart>()
                    .Where(
                        x =>
                            x.WebExtension.WebExtensionStoreReference.Id ==
                            System.Configuration.ConfigurationManager.AppSettings["PaneID"])
                    .FirstOrDefault();
            if (aWebExtension != null)
            {
                bool result = package.WebExTaskpanesPart.DeletePart(aWebExtension);
            }                
        }
    }

Пожалуйста помоги. Заранее спасибо.


person Hardik Shah    schedule 04.01.2017    source источник


Ответы (2)


Я получил ответ, удалив все дочерние элементы панели задач.

public static void RemoveTaskPaneExt(WordprocessingDocument package)
    {
        WebExTaskpanesPart webExTaskpanesPart1 = package.GetPartsOfType<WebExTaskpanesPart>().FirstOrDefault();

        if (webExTaskpanesPart1 != null)
        {
            WebExtensionPart aWebExtension =
                webExTaskpanesPart1.GetPartsOfType<WebExtensionPart>()
                    .Where(
                        x =>
                            x.WebExtension.WebExtensionStoreReference.Id ==
                            System.Configuration.ConfigurationManager.AppSettings["PaneID"])
                    .FirstOrDefault();
            if (aWebExtension != null)
            {
webExTaskpanesPart1.Taskpanes.RemoveAllChildren();
                bool result = package.WebExTaskpanesPart.DeletePart(aWebExtension);
            }                
        }
}

Удачного кодирования!

person Hardik Shah    schedule 10.02.2017

Следующее удалит все WebExtensionTaskpanes, и ваш файл Word станет действительным. Вызовите это вместо вашего метода выше.

private static void RemoveWebExtensionPart(WordprocessingDocument package)
    {
        WebExTaskpanesPart webExTaskpanesPart1 = package.GetPartsOfType<WebExTaskpanesPart>().FirstOrDefault();

        if (webExTaskpanesPart1 != null)
        {
            bool result2 = package.DeletePart(webExTaskpanesPart1);
        }
    }
person Taterhead    schedule 23.01.2017