Как создать оглавление с помощью OpenXML SDK 2.0?

используя SDK, я создаю документы Word, содержащие отчеты. Эти документы должны иметь оглавление. У кого-нибудь есть полное решение, которому я могу следовать, чтобы понять, как это сделать?

(Я прочитал все на http://openxmldeveloper.org/)

2 ответов


посмотреть четвертый и последний экран-бросание последовательно при добавлении / обновлении TOC в документах OpenXML WordprocessingML Эрик Уайт.

надеюсь, что это поможет!

обновление:


согласно FAQ из форумов MSDN я вижу, что эта функция не поддерживается:

8) как создать TOC (оглавление) в документе Word?

Open XML SDK 2.0 не поддерживает эту функцию. но можно создать небольшой TOC через приложение Word и отражает части TOC с документом Компонент Reflector в инструменте производительности Open XML SDK, чтобы узнать, как создайте TOC программно. для получения более подробной информации, пожалуйста, см.:


обновление 2


основываясь на наших комментариях ниже, я мог бы предложить использовать этот сценарий:

  1. вы вручную создаете пустой файл DOCX и вставляете в него TOC.
  2. затем вы сохраняете этот файл и открываете его в OpenXML SDK 2.0 Tool, который предоставляет вам с кодом C# для создания такого пустого файла с заполнителем TOC внутри.
  3. затем вы программно очищаете все данные, необходимые для этого файла DOCX, и сохраняете его.
  4. кроме того, вам нужно будет предоставить механизм, который будет автоматически обновлять TOC после сброса данных (или после открытия документа). Есть несколько вариантов сделать это-см. Экран-бросает 3-5 из ссылки на Eric White post, которую я предоставил выше. Особенно, я думаю, вы должны обратить внимание на 5-й один -"показывает, как использовать макрос AutoOpen для обновления TOC при открытии любого документа, содержащего TOC".

все это выглядит немного сложно, но я надеюсь, что помогает.


спасибо Дмитрий Павлов (@DmitryPavlov) за помощь.

Я не хочу давать ответ на свой собственный вопрос, но это просто для иллюстрации шагов, которые я предпринял.

совет для тех, кто заинтересован, чтобы посмотреть 5-часть экрана-литой Эрик Уайт -изучение таблиц содержания в документах WordprocessingML Open XML. Это имеет всю информацию относительно добавления и обновления TOC (am гораздо больше).

мой решение состояло в том, чтобы использовать шаблон (просто обычный пустой документ, который имел стили для всего, что мне нужно: заголовок 1-5, стиль TOC и т. д.). Это особенно полезно в качестве быстрого решения проблемы стилей (новый документ, который имеет Оглавление, будет иметь новый стиль.xml создан; этот файл имеет некоторые дополнительные данные; в результате иерархия в TOC не так, как ожидалось-т. е. Заголовок 2 является дочерним заголовком заголовка 1, Заголовок 3 является дочерним заголовком заголовка 2, так далее.).

таким образом:

  1. создайте документ Word и добавьте все элементы, которые вы ожидаете добавить позже программно (например, заголовок 1-5, оглавление и т. д.). Удалите все содержимое и сохраните документ (причина этого-создание стилей для всех необходимых элементов).

  2. Я лично добавил шаблон (файл, созданный на шаге #1) в качестве ресурса в моем проекте.

  3. In ваш код, создайте новую копию шаблона (это будет фактический файл, над которым вы будете работать). Я использовал:

    byte[] stream = Properties.Resources.Template;
    File.WriteAllBytes(@"D:\Template.docx", stream);
    File.Copy(@"D:\Template.docx", @"D:\New.docx");
    
  4. очистите все данные в этом документе.

  5. добавьте исходные файлы из screen-cast 2, 3 или 4 в свой проект (для этого см. screen-cast 3) - в конце этих сообщений вы найдете ссылку для загрузки TocAdder.zip. Или просто добавьте ссылку на TocAdder.dll файлы.

  6. вставьте TOC. Просто пример:

    using (WordprocessingDocument wdoc = WordprocessingDocument.Open(@"D:\New.docx", true))
    {
        XElement firstPara = wdoc
            .MainDocumentPart
            .GetXDocument()
            .Descendants(W.p)
            .FirstOrDefault();
        TocAdder.AddToc(wdoc, firstPara,
            @"TOC \o '1-3' \h \z \u", null, null);
    }
    
  7. замените стили во вновь созданном документе на стили из шаблона. Вы можете использовать этот ресурс из MSDN:замена частей стилей в документах Word 2010 с помощью пакета SDK Open XML 2.0. Опять же, пример:

    string fromDoc = @"D:\Template.docx";
    string toDoc = @"D:\New.docx";
    var node = WDExtractStyles(fromDoc, false);
    if (node != null)
        WDReplaceStyles(toDoc, node, false);
    node = WDExtractStyles(fromDoc);
    if (node != null)
        WDReplaceStyles(toDoc, node);
    
  8. необязательно используйте один из методов, описанных в screen-cast 3, 4 или 5 в чтобы обойти проблему с модальным диалоговым окном, которое ставит Word.

надеюсь, это будет полезно для кого-то.