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

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

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

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

Когда рекомендуется открывать документ только для чтения

Иногда требуется открыть документ для проверки или получения некоторых сведений, при этом нужно сделать это так, чтобы документ нельзя было изменить. В этих случаях документ нужно открыть только для чтения. В этом разделе описывается несколько программных способов открытия документа Word в режиме только для чтения.

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

В пакете Open XML SDK класс WordprocessingDocument представляет пакет документов Word. Для работы с документом Word сначала создайте экземпляр класса WordprocessingDocument из документа, а затем работайте с этим экземпляром. После создания экземпляра в документе можно получить доступ к основной части документа, которая содержит текст. Каждый пакет Open XML содержит различные части. Как минимум документ WordProcessingDocument должен содержать основную часть документа, которая выступает как контейнер основного текста документа. Пакет также может содержать дополнительные части. Учтите, что в документе Word текст основной части документа представлен в пакете как XML с использованием разметки WordprocessingML.

Чтобы создать экземпляр класса в документе, нужно вызвать один из методов Open. Представлено несколько таких методов Open с разными сигнатурами. Эти методы позволяют указать, можно ли изменять документ, как описано в следующей таблице.

Метод Open Раздел справочника по библиотеке классов Описание Open(String, Boolean) Open(String, Boolean) Создание экземпляра класса WordprocessingDocument из указанного файла. Open(Stream, Boolean) Open(Stream, Boolean) Создание экземпляра класса WordprocessingDocument из указанного потока ввода-вывода. Open(String, Boolean, OpenSettings) Open(String, Boolean, OpenSettings) Создание экземпляра класса WordprocessingDocument из указанного файла. Open(Stream, Boolean, OpenSettings) Open(Stream, Boolean, OpenSettings) Создание экземпляра класса WordprocessingDocument из указанного потока ввода-вывода.

В таблице, представленной ранее, указаны только те методы Open, которые принимают логическое значение в качестве второго параметра, определяющее, можно ли изменять документ. Чтобы открыть документ только для чтения задайте в этом параметре значение false.

Обратите внимание на то, что два метода Open создают экземпляр класса WordprocessingDocument на основе строки, заданной в качестве первого параметра. Этот способ используется в первом примере кода. В нем применяется первый метод Open из таблицы, представленной ранее, с сигнатурой, для которой требуются два параметра. Первый параметр принимает строку, которая представляет полный путь (для имени файла), из которого требуется открыть документ. Второй параметр имеет значение true или false. В этом примере используется значение false, которое указывает, открывается ли файл для редактирования.

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

Два других метода Open создают экземпляр класса WordprocessingDocument на основе потока ввода-вывода. Этот подход можно использовать, например, в случае, когда есть приложение Microsoft SharePoint Foundation 2010, которое использует поток ввода-вывода, и для работы с документом необходимо использовать Пакет SDK 2.5 Open XML.

Следующий пример кода открывает документ на основе потока.

Представим, что есть приложение, использующее поддержку Open XML в пространстве имен System.IO.Packaging библиотеки классов .NET Framework, и нужно использовать пакет Пакет SDK 2.5 Open XML для работы с пакетом в режиме доступа только для чтения. В то время как в пакете Пакет SDK 2.5 Open XML есть перегрузки метода, принимающие Package в качестве первого параметра, нет такой перегрузки, которая принимает логическое значение как второй параметр, обозначающее, нужно ли открыть документ для редактирования.

Рекомендуется сначала открыть пакет только для чтения перед созданием экземпляра класса WordprocessingDocument, как показано во втором примере кода. В следующем примере выполняется эта операция.

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

Базовая структура документа

Базовая структура документа 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 Диапазон текста.

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

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

Пример кода

В первом примере метод OpenWordprocessingDocumentReadOnly открывает документ Word только для чтения. Вызовите его, передав полный путь к файлу, который нужно открыть. Например, в следующем примере файл Word12.docx в папке "Общие документы" открывается только для чтения.

Во втором примере метод OpenWordprocessingPackageReadonly используется для открытия документа Word только для чтения из System.IO.Packaging.Package. Вызовите его, передав полный путь к файлу, который нужно открыть. Например, в следующем примере файл Word12.docx в папке "Public Documents" открывается только для чтения.

Если вы раскомментируете оператор, который сохраняет файл, программа выдаст IOException, потому что файл открыт только для чтения.

📎📎📎📎📎📎📎📎📎📎