Поделиться через


Откройте и добавьте текст в текстовый документ

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


Открытие документа и добавление в него текста

Пакет SDK Open XML помогает создавать Word обработки структуры документа и содержимого с помощью строго типизированных классов, соответствующих WordprocessingML элементам. В этом разделе показано, как использовать классы в пакете SDK Open XML для открытия Word обработки документа и добавления в него текста. Кроме того, в этом разделе представлена базовая структура WordprocessingML документа, связанные XML-элементы и соответствующие классы open XML SDK.


Создание объекта WordprocessingDocument

В пакете SDK WordprocessingDocument Open XML класс представляет пакет документов Word. Чтобы открыть документ Word и работать с ним, создайте экземпляр WordprocessingDocument класса из документа. После создания экземпляра вы сможете получить доступ к основной части документа, содержащей текст. Текст в main части документа представлен в пакете в виде XML с помощью WordprocessingML разметки.

Чтобы создать экземпляр класса из документа, вызовите один из Open методов . Представлено несколько перегрузок с разной сигнатурой. В примере кода в этом разделе используется Open(String, Boolean) метод с сигнатурой, требующей двух параметров. Первый параметр принимает строку полного пути, представляющую документ, который требуется открыть. Второй параметр — или truefalse и указывает, нужно ли открыть файл для редактирования. Изменения, внесенные в документ, не будут сохранены, если этот параметр имеет значение false.

В следующем примере кода вызывается Open метод .

// Open a WordprocessingDocument for editing using the filepath.
using (WordprocessingDocument wordprocessingDocument = WordprocessingDocument.Open(filepath, true))
{

    if (wordprocessingDocument is null)
    {
        throw new ArgumentNullException(nameof(wordprocessingDocument));
    }

После открытия пакета документа Word вы можете добавить текст в основную часть документа. Чтобы получить доступ к тексту части документа main, создайте все отсутствующие элементы и назначьте ссылку на текст документа, как показано в следующем примере кода.

// Assign a reference to the existing document body.
MainDocumentPart mainDocumentPart = wordprocessingDocument.MainDocumentPart ?? wordprocessingDocument.AddMainDocumentPart();
mainDocumentPart.Document ??= new Document();
mainDocumentPart.Document.Body ??= mainDocumentPart.Document.AppendChild(new Body());
Body body = wordprocessingDocument.MainDocumentPart!.Document!.Body!;

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

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

    <w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
      <w:body>
        <w:p>
          <w:r>
            <w:t>Example text.</w:t>
          </w:r>
        </w:p>
      </w:body>
    </w:document>

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

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

Дополнительные сведения об общей структуре частей и элементов документа WordprocessingML см. в разделе Структура документа WordprocessingML.


Создание разметки WordprocessingML для добавления текста

Если у вас есть доступ к тексту части документа main, добавьте текст, добавив экземпляры Paragraphклассов , Runи Text . При этом будет создана требуемая разметка WordprocessingML. В следующем примере кода добавляется абзац.

// Add new text.
Paragraph para = body.AppendChild(new Paragraph());
Run run = para.AppendChild(new Run());
run.AppendChild(new Text(txt));

Пример кода

Приведенный здесь пример OpenAndAddTextToWordDocument метода можно использовать для открытия документа Word и добавления текста с помощью пакета SDK Open XML. Для вызова этого метода передайте полный путь к файлу в качестве первого параметра и текст в качестве второго параметра.

string file = args[0];
string txt = args[1];

OpenAndAddTextToWordDocument(args[0], args[1]);

Ниже приведен полный пример кода на языках C# и Visual Basic.

Обратите внимание, что OpenAndAddTextToWordDocument метод не включает явный вызов .Save Это связано с тем, что функция автосохранения включена по умолчанию и не была отключена в вызове Open метода с помощью OpenSettings.

using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using System;

static void OpenAndAddTextToWordDocument(string filepath, string txt)
{
    // Open a WordprocessingDocument for editing using the filepath.
    using (WordprocessingDocument wordprocessingDocument = WordprocessingDocument.Open(filepath, true))
    {

        if (wordprocessingDocument is null)
        {
            throw new ArgumentNullException(nameof(wordprocessingDocument));
        }

        // Assign a reference to the existing document body.
        MainDocumentPart mainDocumentPart = wordprocessingDocument.MainDocumentPart ?? wordprocessingDocument.AddMainDocumentPart();
        mainDocumentPart.Document ??= new Document();
        mainDocumentPart.Document.Body ??= mainDocumentPart.Document.AppendChild(new Body());
        Body body = wordprocessingDocument.MainDocumentPart!.Document!.Body!;

        // Add new text.
        Paragraph para = body.AppendChild(new Paragraph());
        Run run = para.AppendChild(new Run());
        run.AppendChild(new Text(txt));
    }
}

См. также