MyTetra Share
Делитесь знаниями!
Как найти и заменить текст в части документа (Open XML SDK)
Время создания: 04.09.2019 18:55
Автор: microsoft.com
Текстовые метки: Open XML SDK
Раздел: Компьютер - C# - MSWord - Open XML SDK
Запись: Kozlov-AE/Tetra/master/base/1563830151rw3vy3cft1/text.html на raw.githubusercontent.com

Как найти и заменить текст в части документа (Open XML SDK)

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

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

    using System.IO;

    using System.Text.RegularExpressions;

    using DocumentFormat.OpenXml.Packaging;

Пакеты и части документа

Документ Open XML хранится в виде пакета, формат которого определяется спецификацией ISO/IEC 29500-2. Пакет может состоять из нескольких частей со связями между ними. Связь между частями определяет категорию документа. Документ может быть определен как текстовый документ, если его элемент связи пакета содержит связь с основной частью документа. Если соответствующий элемент содержит связь с частью презентации, он может быть определен как презентация. Если соответствующий элемент содержит связь с частью книги, он определяется как электронная таблица. В этот разделе вы будете использовать пакет текстового документа.

Получение объекта WordprocessingDocument

В примере кода сначала откройте файл обработки текстов, создав экземпляр класса WordprocessingDocument, как показано в следующем операторе using. В том же операторе откройте текстовый файл document, используя метод Open и задав для логического параметра значение true, чтобы разрешить редактирование документа.

    using (WordprocessingDocument wordDoc =

            WordprocessingDocument.Open(document, true))

    {

        // Insert other code here.

    }

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

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

После открытия файла для редактирования его можно прочитать с помощью объекта StreamReader.

    using (StreamReader sr = new StreamReader(wordDoc.MainDocumentPart.GetStream()))

    {

        docText = sr.ReadToEnd();

    }

Затем код создает объект регулярного выражения, содержащий строку "Hello world!". После этого текстовое значение заменяется на текст "Hi Everyone!". Дополнительные сведения о регулярных выражениях см. в статье Регулярные выражения

    Regex regexText = new Regex("Hello world!");

    docText = regexText.Replace(docText, "Hi Everyone!");

В следующем примере показан быстрый и простой способ поиска и замены. Он может оказаться не вполне надежным, поскольку извлекает документ XML в строчном формате. Используя регулярное выражение, вы можете случайно заменить XML-теги и повредить документ. Если вы хотите просто выполнить поиск в документе, не заменяя его содержимого, используйте MainDocumentPart.Document.InnerText.

В следующем примере также показано, как использовать регулярное выражение для поиска и замены текстового значения "Hello world!", которое хранится в текстовом файле с именем "MyPkg8.docx", на значение "Hi Everyone!". Для вызова метода SearchAndReplace можно использовать приведенный ниже пример.

    SearchAndReplace(@"C:\Users\Public\Documents\MyPkg8.docx");

После запуска программы вы можете просмотреть файл, чтобы увидеть измененный текст "Hello world!".


Далее представлен полный пример кода на языке C#

    // To search and replace content in a document part.

    public static void SearchAndReplace(string document)

    {

        using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))

        {

            string docText = null;

            using (StreamReader sr = new StreamReader(wordDoc.MainDocumentPart.GetStream()))

            {

                docText = sr.ReadToEnd();

            }

            Regex regexText = new Regex("Hello world!");

            docText = regexText.Replace(docText, "Hi Everyone!");

            using (StreamWriter sw = new StreamWriter(wordDoc.MainDocumentPart.GetStream(FileMode.Create)))

            {

                sw.Write(docText);

            }

        }

    }

 

Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования