Откройте и добавьте текст в текстовый документ
В этом разделе показано, как использовать классы в пакете 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) метод с сигнатурой, требующей двух параметров. Первый параметр принимает строку полного пути, представляющую документ, который требуется открыть. Второй параметр — или true
false
и указывает, нужно ли открыть файл для редактирования. Изменения, внесенные в документ, не будут сохранены, если этот параметр имеет значение 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));
}
}