Размер
Как: принять все исправления в текстовом документе (Open XML SDK)
Play

Как: принять все исправления в текстовом документе (Open XML SDK)

В этом разделе показано, как использовать пакет Open XML SDK 2.5 для Office, чтобы принять все исправления в текстовом документе программными средствами.

Для компиляции кода, представленного в этом разделе, требуются следующие директивы сборки.

Открытие существующего документа для изменения

Чтобы открыть существующий документ, создайте экземпляр классаWordprocessingDocument, как показано в приведенном ниже оператореusing. Для этого откройте текстовый файл с указаннным fileName с помощью методаOpen (String, Boolean), с логическим значением параметраtrue, чтобы разрешить редактирование документа.

Инструкцию using рекомендуется использовать вместо традиционной последовательности .Open, .Save, .Close. Это позволяет обеспечить автоматический вызов метода Dispose (внутреннего метода, используемого пакетом SDK Open XML для очистки ресурсов) при достижении закрывающей скобки. Блок, следующий за инструкцией using, создает область для объекта, создаваемого или именуемого в инструкции using, в данном случае — wdDoc. Так как класс WordprocessingDocument в пакете SDK Open XML автоматически сохраняет и закрывает объект как часть реализации System.IDisposable, а также поскольку метод Dispose вызывается автоматически при выходе из блока, не нужно явно вызывать методы Save и Close, если используется инструкция using.

Структура документа WordProcessingML

Базовая структура документа WordProcessingML состоит из элементов document и body, а также из одного или нескольких элементов уровня блока, таких как p, который представляет абзац. В свою очередь, абзац содержит один или несколько элементов r. r представляет прогон — областью текста с общим набором свойств, например форматированием. Прогон содержит один или несколько элементов t. t содержит фрагмент текста. В следующем примере кода показаны исправления WordprocessingML для документа с текстом "Example text."

С помощью пакета SDK 2.5 Open XML можно создать структуру и содержимое документа, использующие строго типизированные классы, которые соответствуют элементам WordprocessingML. Эти классы можно найти в пространстве имен DocumentFormat.OpenXml.Wordprocessing . В следующей таблице перечислены имена классов, соответствующие элементам document, body, p, r и t.

Элемент WordprocessingML Класс пакета Open XML SDK 2.5 Описание document Document Корневой элемент основной части документа. body Body Контейнер для структур уровня блокировки, таких как абзацы, таблицы, примечания и других элементов, описанных в спецификации ISO/IEC 29500. p Paragraph Абзац. r Run Прогон. t Text Диапазон текста.

Элемент ParagraphPropertiesChange

При принятии метки исправления, измените свойства абзаца путем удаления существующего текста или вставки нового текста. В следующих разделах, прочитайте о трех элементах, используемых в примере кода для изменения содержимого абзаца, главным образом, <w: pPrChange\> (Revision Information for Paragraph Properties) и элементы** <w:del> ** (Deleted Paragraph), и <w:ins> (Inserted Table Row).

В спецификации ISO/IEC 29500 содержатся следующие сведения об элементе ParagraphPropertiesChange (pPrChange).

pPrChange (сведения об исправлении в свойствах абзаца)

Этот элемент определяет сведения об одном исправлении в наборе свойств абзаца в документе WordprocessingML.

Исправление хранится в документе следующим образом:

Дочерний элемент этого элемента содержит полный набор свойств абзаца на момент до исправления.

В атрибутах этого элемента содержатся сведения о времени исправления (то есть о том, с какого момента эти свойства стали "бывшим" набором свойств абзаца).

Рассмотрим абзац в документе WordprocessingML, к которому применяется выравнивание по центру, и это изменение свойств абзаца отслеживается как исправление. Данное исправление будет обозначено следующей разметкой WordprocessingML.

Элемент указывает, что были редактированы свойства абзаца на 01-01-2006 Самантой Смит и предыдущий набор свойств абзаца является набором null (иными словами, никакое из свойств абзаца не присутствует явным образом в элементе). pPr pPrChange

Удаленный элемент

В спецификацииISO/IEC 29500содержатся следующие сведения об элементе Deleted (del).

del (удаленный абзац)

Этот элемент указывает, что знак абзаца, ограничивающий конец абзаца в документе WordprocessingML, будет считаться удаленным (то есть содержимое этого абзаца более не ограничено этим знаком абзаца и объединено со следующим абзацем, однако данное содержимое автоматически не отмечается как удаленное) и данное удаление отслеживается как часть исправления.

Рассмотрим документ с двумя абзацами, каждый из которых ограничен знаком ¶:

Если удаляется знак, ограничивающий конец первого абзаца, и данное изменение отслеживается как исправление, будет получен следующий результат:

. Это исправление представлено следующим кодом WordprocessingML:

Элемент del в свойствах пробега первого знака абзаца указывает на то, что этот знак абзаца был удален и данное удаление отслеживается как исправление.

Вставленный элемент

В спецификации ISO/IEC 29500 содержатся следующие сведения об элементе Inserted (ins).

ins (вставленная строка таблицы)

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

Рассмотрим таблицу с двумя строками и двумя столбцами, в которой вторая строка отмечена как вставленная путем исправления. Это требование должно быть указано с помощью следующего кода WordprocessingML:

Элемент ins в свойствах второй сроки таблицы указывает на то, что эта строка была вставлена и вставка отслеживается как исправление.

Как работает пример кода

После открытия документа в операторе using создается экземпляр класса Body, а затем для обработки изменений форматирования создается список изменений changes List и удаляет каждое изменение из списка (элемент w:pPrChange) List, что соответствует принятию изменений.

Затем для обработки удалений создается список удалений deletions List, и каждый элемент удаления (w:del) удаляется из списка List, что соответствует процессу принятия удалений.

В конце для обработки вставок создается список вставок insertions List, и вставляется новый текст путем удаления элемента вставки (w:ins), что соответствует принятию вставленного текста.

Пример кода

В следующем примере кода показано, как принять все исправления, в текстовом документе. Чтобы запустить программу, можно вызвать метод AcceptRevisions для принятия исправлений в файле «word1.docx», как показано в следующем примере.

После запуска программы откройте файл Word и убедитесь, что все исправления были приняты.

📎📎📎📎📎📎📎📎📎📎