Перейти к содержимому

Как отобразить документ ворд в wpf c

  • автор:

Документы в WPF

Windows Presentation Foundation (WPF) предлагает широкий спектр функций документов, позволяющих создавать содержимое с высокой точностью, предназначенное для более легкого доступа и чтения, чем в предыдущих поколениях Windows. Помимо расширенных возможностей и качества WPF также предоставляет интегрированные службы для отображения документов, упаковки и безопасности. В этом разделе содержатся вводные сведения о типах и упаковке документов WPF.

Типы документов

WPF разделяет документы на две основные категории на основе их предполагаемого использования; эти категории документов называются «документы фиксированного формата» и «документы нефиксированного формата».

Документы фиксированного формата предназначены для сфер применения, требующих точного представления (WYSIWYG) независимо от используемого дисплея или принтера. Документы фиксированного формата используются в компьютерной верстке, текстовой обработке и макетах форм, где строгое соответствие дизайну исходной страницы имеет критическое значение. При использовании такого макета документ фиксированного формата сохраняет точное расположение элементов содержимого независимо от используемого устройства изображения или печати. Так, страница документа фиксированного формата, отображаемая на дисплее 96 точек на дюйм, будет совершенно одинаково отображаться на лазерном принтере 600 точек на дюйм и фотонаборной машине 4800 точек на дюйм. Макет страницы остается неизменным во всех случаях, хотя качество документа повышается с учетом возможностей устройства.

Для сравнения: документы нефиксированного формата предназначены для повышения удобства просмотра и чтения; их лучше всего использовать, когда в работе с документом важнее всего удобство чтения. Вместо того чтобы использовать какой-либо определенный макет, документы нефиксированного формата динамически корректируют и перемещают содержимое с учетом переменных времени выполнения, таких как размер окна, разрешение устройства и дополнительные пользовательские настройки. Веб-страница — это простой пример документа нефиксированного формата, содержимое на которой динамически форматируется, чтобы уместиться в окне. Документы нефиксированного формата оптимизируют просмотр и чтение для пользователя в зависимости от среды выполнения. Например, один и тот же документ нефиксированного формата будет динамически переформатирован, чтобы обеспечить оптимальную читаемость на дисплее высокого разрешения 19 дюймов или небольшом экране PDA размером 2 x 3 дюйма. Кроме того, документы нефиксированного формата имеют несколько встроенных возможностей, включая поиск, режимы просмотра, оптимизирующие читаемость, и возможность менять размер и внешний вид шрифта. См. иллюстрации, примеры и подробное описание документов нефиксированного формата в разделе Общие сведения о документах нефиксированного формата.

Элементы управления документами и макеты текста

Платформа .NET предоставляет набор готовых элементов управления, упрощающих использование документов фиксированного и нефиксированного форматов и работу с текстом в приложении в принципе. Отображение содержимого документа фиксированного формата обеспечивается элементом управления DocumentViewer. Отображение содержимого документа нефиксированного формата обеспечивается тремя элементами управления: FlowDocumentReader, FlowDocumentPageViewer и FlowDocumentScrollViewer, которые соответствуют разным пользовательским сценариям (см. разделы ниже). Другие элементы управления WPF предоставляют упрощенную разметку для стандартных способов использования текста (см. раздел Текст в пользовательском интерфейсе ниже).

Элемент управления документом фиксированного формата DocumentViewer

Элемент управления DocumentViewer предназначен для отображения содержимого FixedDocument. Элемент управления DocumentViewer предоставляет интуитивный интерфейс пользователя со встроенной поддержкой стандартных операций, включая вывод на печать, копирование в буфер обмена, масштабирование и функции текстового поиска. Элемент управления предоставляет доступ к страницам содержимого через знакомый механизм прокрутки. Как и все элементы управления WPF, DocumentViewer поддерживает полное или частичное изменение стиля, благодаря чему этот элемент управления можно интегрировать практически в любое приложение или среду.

DocumentViewer предназначен для отображения содержимого в режиме «только чтение»; редактирование и изменение содержимого недоступно и не поддерживается.

Элементы управления документа нефиксированного формата

Дополнительные сведения о функциях документов нефиксированного формата и создании таких документов см. в разделе Общие сведения о документах нефиксированного формата.

Отображение содержимого документа нефиксированного формата обеспечивается тремя элементами управления: FlowDocumentReader, FlowDocumentPageViewer и FlowDocumentScrollViewer.

FlowDocumentReader

Элемент управления FlowDocumentReader включает функции, которые позволяют пользователю динамически переключаться между разными режимами просмотра, в том числе постраничным режимом (одна страница), двухстраничным режимом (книжный формат чтения) и непрерывной прокруткой (без нижней границы). Дополнительные сведения о таких режимах просмотра см. в разделе FlowDocumentReaderViewingMode. Если возможность динамически переключаться между разными режимами просмотра не требуется, элементы управления FlowDocumentPageViewer и FlowDocumentScrollViewer предоставляют облегченные средства просмотра содержимого документов нефиксированного формата, которые зафиксированы в определенном режиме просмотра.

FlowDocumentPageViewer и FlowDocumentScrollViewer

FlowDocumentPageViewer отображает содержимое в постраничном режиме просмотра, а FlowDocumentScrollViewer — в режиме непрерывной прокрутки. Средства FlowDocumentPageViewer и FlowDocumentScrollViewer зафиксированы в определенном режиме просмотра. Сравните со средством просмотра FlowDocumentReader, которое включает функции для динамического переключения между разными режимами просмотра (как перечисление FlowDocumentReaderViewingMode), однако является более ресурсоемким, чем FlowDocumentPageViewer или FlowDocumentScrollViewer.

По умолчанию вертикальная полоса прокрутки отображается всегда, а горизонтальная полоса прокрутки становится видимой при необходимости. Пользовательский интерфейс по умолчанию для FlowDocumentScrollViewer не включает панель инструментов; однако свойство IsToolBarVisible можно использовать для включения встроенной панели инструментов.

Текст в пользовательском интерфейсе

Текст можно добавлять не только в документы, но и использовать в интерфейсе приложений, например в формах. В WPF имеется множество элементов управления для рисования текста на экране. Каждый элемент управления предназначен для своего сценария и имеет собственный список функций и ограничений. Как правило, элемент TextBlock следует использовать, если требуется ограниченная поддержка текста, например короткого предложения в пользовательском интерфейсе. Label можно использовать, если требуется минимальная поддержка текста. Дополнительные сведения см. в разделе Общие сведения о классе TextBlock.

Упаковка документов

API System.IO.Packaging предоставляет эффективные средства упорядочивания данных приложения, содержимого документов и сопутствующих ресурсов в одном портативном контейнере с возможностью удобного доступа и распространения. ZIP-файл — это пример типа Package, который может удерживать несколько объектов как единый блок. API упаковки предоставляет реализацию ZipPackage по умолчанию, спроектированную с использованием стандарта Open Packaging Conventions с архитектурой файлов XML и ZIP. API упаковки WPF упрощает создание пакетов, хранение в них объектов и осуществление доступа к таким объектам. Объект, хранящийся в пакете Package, называется PackagePart («частью»). Пакеты также могут включать подписанные цифровые сертификаты, с помощью которых можно идентифицировать создателя части и убедиться, что содержимое пакета не было изменено. Пакеты также включают функцию PackageRelationship, позволяющую добавлять в пакет дополнительную информацию или связывать ее с определенными частями, не меняя содержимое существующих частей. Службы пакета также поддерживают Microsoft Windows Rights Management (RM).

Архитектура пакета WPF лежит в основе ряда ключевых технологий:

  • Документы XPS, соответствующие стандарту XML Paper Specification (XPS).
  • Документы открытого XML-формата Microsoft Office «12» (.docx).
  • Пользовательские форматы хранения для собственного приложения.

В зависимости от API упаковки документ XpsDocument предназначен для хранения документов с фиксированным содержимым WPF. Документ XpsDocument — это самостоятельный документ, который можно открыть в средстве просмотра, отобразить в элементе управления DocumentViewer, перенаправить в очередь печати или вывести непосредственно на совместимый с XPS принтер.

В следующих разделах представлены дополнительные сведения о API Package и XpsDocument, предоставляемых WPF.

Компоненты пакета

Интерфейсы API упаковки WPF позволяют упорядочить данные и документы приложения в единый портативный блок. ZIP-файл является одним из наиболее распространенных типов пакетов и типом пакета по умолчанию, предоставляемым WPF. Package является абстрактным классом, на основе которого с использованием соответствующей открытым стандартам архитектуры файлов XML и ZIP реализован класс ZipPackage. Метод Open использует класс ZipPackage для создания и использования ZIP-файлов по умолчанию. Пакет может содержать три основных типа элементов:

Элемент Description
PackagePart Содержимое приложения, данные, документы и файлы ресурсов.
PackageDigitalSignature [Сертификат X.509] для идентификации, аутентификации и проверки.
PackageRelationship Добавленные сведения о пакете или определенной части.
PackageParts

PackagePart («часть») — это абстрактный класс, который относится к объекту, хранимому в классе Package. В ZIP-файле части пакета соответствуют отдельным файлам, хранящимся в ZIP-файле. ZipPackagePart предоставляет реализацию по умолчанию для сериализуемых объектов, хранящихся в классе ZipPackage. Как и в файловой системе, части, которые содержатся в пакете, хранятся в иерархическом каталоге или организованы по папкам. С помощью API упаковки WPF приложения могут записывать, хранить и считывать несколько объектов PackagePart, используя один контейнер в виде ZIP-файла.

PackageDigitalSignatures

В целях безопасности класс PackageDigitalSignature («цифровая подпись») можно связать с частями в составе пакета. Класс PackageDigitalSignature включает сертификат [509], который выполняет две функции:

  1. Идентификация и проверка подлинности создателя части.
  2. Проверка, не была ли часть изменена.

Цифровая подпись не защищает часть от изменения, но проверка цифровой подписи завершится ошибкой, если часть изменяется каким-либо образом. В таком случае приложение может предпринять соответствующие действия, например не допустить открытия части или уведомить пользователя об изменении (и, следовательно, ненадежности) части.

PackageRelationships

Класс PackageRelationship («отношение») предоставляет механизм для связи дополнительной информации с пакетом или частью в пакете. Отношение — это возможность на уровне пакета, позволяющая связывать дополнительную информацию с частью, не меняя фактического содержимого части. Вставлять новые данные непосредственно в содержимое части, как правило, нецелесообразно:

  • Фактический тип части и схема содержимого неизвестны.
  • Даже если эти параметры известны, схема содержимого может не обеспечивать средства для добавления новых данных.
  • Часть может быть защищена от изменений цифровой подписью или шифрованием.

Отношения пакета предоставляют видимые средства добавления дополнительной информации в отдельные части или весь пакет и создания соответствующих связей между этой информацией и объектами. Отношения пакетов используются для решения двух основных задач:

  1. Определение отношений зависимости между частями.
  2. Определение информационных отношений, добавляющих примечания или другие данные, связанные с частью.

Класс PackageRelationship предоставляет средство для быстрого и удобного определения зависимостей и добавления других сведений, связанных с частью пакета или пакетом в целом.

Отношения зависимости

Отношения зависимости используются для описания зависимостей между частями. Например, пакет может содержать HTML-часть, которая включает один или несколько тегов изображений . Теги изображений относятся к изображениям, которые хранятся как части внутри пакета или вне его (например, части, доступные через Интернет). Создание класса PackageRelationship, связанного с HTML-файлом, ускоряет и упрощает обнаружение зависимых ресурсов и доступ к ним. Браузер или приложение средства просмотра может осуществлять прямой доступ к отношениям частей и сразу приступать к сборке зависимых ресурсов, даже не зная схемы и не выполняя синтаксического анализа документа.

Информационные отношения

Подобно примечанию или заметке, класс PackageRelationship можно использовать для хранения других типов информации, которые требуется связать с частью, не меняя самого содержимого части.

XPS-документы

Документ XML Paper Specification (XPS) — это пакет, который содержит один или несколько фиксированных документов и все ресурсы и сведения, необходимые для отображения. XPS также является собственным форматом файлов в очереди на печать Windows Vista. Класс XpsDocument хранится в стандартном наборе данных ZIP и может включать комбинацию из XML-компонентов и двоичных компонентов, таких как файлы изображений и шрифтов. PackageRelationships используются для определения зависимостей между содержимым и ресурсами, необходимыми для полного отображения документа. Структура XpsDocument предоставляет единое многофункциональное решение высокой надежности для работы с документами:

  • Чтение, запись и хранение содержимого и ресурсов документов фиксированного формата в одном портативном документе с возможностью удобного распространения.
  • Отображение документов в приложении средства просмотра XPS.
  • Вывод документов в собственном формате вывода в очередь на печать Windows Vista.
  • Перенаправление документов непосредственно на совместимый с XPS принтер.

См. также

  • FixedDocument
  • FlowDocument
  • XpsDocument
  • ZipPackage
  • ZipPackagePart
  • PackageRelationship
  • DocumentViewer
  • Текст
  • Общие сведения о документах нефиксированного формата
  • Общие сведения о печати
  • Сериализация и хранение документов

Совместная работа с нами на GitHub

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

Как отобразить документ ворд в wpf c

Фиксированные документы характеризуются точной неизменной компоновкой и предназначены преимущественно для печати, но могут использоваться также и для чтения текста с экрана. К таким документам в WPF относятся документы на основе XPS. Для просмотра XPS-документа используется элемента DocumentViewer . В качестве содержимого DocumentViewer принимает элемент FixedDocument , который как раз и представляет фиксированный документ.

Фиксированный документ FixedDocument может принимать различное количество страниц. Каждая страница представляет элемент PageContent . В этот элемент помещается объект FixedPage , в который в свою очередь помещаются другие элементы — это могут эллипсы, текстовые поля и т.д. Так, в данном случае у нас две страницы. Используя свойства Width и Height, мы можем управлять размером страниц.

Также, здесь мы разместили две кнопки для загрузки и сохранения документа. Теперь в файле кода c# определим для них обработчики событий:

using Microsoft.Win32; using System.IO; using System.Windows; using System.Windows.Xps.Packaging; using System.Windows.Xps; using System.Windows.Documents; namespace DocumentsApp < public partial class MainWindow : Window < public MainWindow() < InitializeComponent(); >private void Save_Click(object sender, RoutedEventArgs e) < SaveFileDialog sfd = new SaveFileDialog(); sfd.Filter = "XPS Files (*.xps)|*.xps"; if (sfd.ShowDialog() == true) < XpsDocument doc = new XpsDocument(sfd.FileName, FileAccess.Write); XpsDocumentWriter writer = XpsDocument.CreateXpsDocumentWriter(doc); writer.Write(documentViewer.Document as FixedDocument); doc.Close(); >> private void Load_Click(object sender, RoutedEventArgs e) < OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "XPS Files (*.xps)|*.xps"; if (ofd.ShowDialog() == true) < XpsDocument doc = new XpsDocument(ofd.FileName, FileAccess.Read); documentViewer.Document = doc.GetFixedDocumentSequence(); >> > >

Для сохранения и открытия документа применяется класс XpsDocument . Для его использования нам надо добавить в проект библиотеки ReachFramework.dll и System.Printing.dll .

Чтобы сохранить документ, получаем объект XpsDocumentWriter и вызываем его метод Write() .

Для открытия документа просто используем метод GetFixedDocumentSequence() объекта XpsDocument.

И после запуска приложения мы сможем увидеть наш определенный в разметке xaml документ:

FixedDocument в WPF

Как видно из скриншота, контейнер фиксированных документов DocumentViewer уже имеет некоторую базовую функциональность (например, масштабирование, поиск), которые мы можем использовать.

Для эксперимента можно также попробовать создать простейшие xps-файлы в MS Word (для этого стандартный документ docx можно экспортировать в формат xps) и загрузить этот документ в нашу программу.

Как получить доступ к объектам взаимодействия Office

В C# предусмотрены функции, которые упрощают доступ к объектам API Office. К новым функциям относятся именованные и необязательные аргументы, новый тип dynamic , а также возможность передавать аргументы ссылочным параметрам в методах COM, как если бы они были параметрами значений.

В этой статье вы используете новые функции для написания кода, создающего и отображающего лист Microsoft Office Excel. Код создается для добавления документа Office Word, содержащего значок, связанный с листом Excel.

Для выполнения данного пошагового руководства на компьютере должны быть установлены Microsoft Office Excel 2007 и Microsoft Office Word 2007 или более поздние версии продуктов.

Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Персонализация среды IDE.

VSTO (набор средств Visual Studio для Office) зависит от платформа .NET Framework. Надстройки COM также можно записывать с помощью платформа .NET Framework. Надстройки Office нельзя создавать с помощью .NET Core и .NET 5+, последних версий .NET. Это связано с тем, что .NET Core/.NET 5+ не может работать вместе с платформа .NET Framework в том же процессе и может привести к сбоям загрузки надстроек. Вы можете продолжать использовать платформа .NET Framework для записи надстроек VSTO и COM для Office. Корпорация Майкрософт не будет обновлять VSTO или платформу надстройки COM для использования .NET Core или .NET 5+. Вы можете воспользоваться преимуществами .NET Core и .NET 5+, включая ASP.NET Core, чтобы создать серверную часть надстроек Office Web.

Создание нового проекта консольного приложения

  1. Запустите среду Visual Studio.
  2. В меню Файл последовательно выберите команды Создатьи Проект. Откроется диалоговое окно Создание проекта .
  3. В области установленных шаблонов разверните C#, а затем выберите Windows.
  4. В верхней части диалогового окна «Новый проект», чтобы выбрать платформа .NET Framework 4 (или более поздней версии) в качестве целевой платформы.
  5. В области «Шаблоны» выберите консольное приложение.
  6. Введите имя проекта в поле Имя.
  7. Нажмите ОК.

В обозревателе решений появится новый проект.

Добавление ссылок

  1. В Обозреватель решений щелкните правой кнопкой мыши имя проекта и нажмите кнопку «Добавить ссылку«. Откроется диалоговое окно Добавление ссылки.
  2. На странице Сборки в списке Имя компонента выберите Microsoft.Office.Interop.Word, а затем, удерживая нажатой клавишу CTRL, выберите Microsoft.Office.Interop.Excel. Если сборки не отображаются, их может потребоваться установить. Узнайте , как установить основные сборки взаимодействия Office.
  3. Нажмите ОК.

Добавление необходимых директив using

В Обозреватель решений щелкните файл Program.cs правой кнопкой мыши и выберите команду View Code. В начало файла кода добавьте следующие директивы using :

using Excel = Microsoft.Office.Interop.Excel; using Word = Microsoft.Office.Interop.Word; 

Создание списка банковских счетов

Вставьте следующее определение класса в файл Program.cs в класс Program .

public class Account < public int ID < get; set; >public double Balance < get; set; >> 

Чтобы создать список bankAccounts , содержащий два счета, добавьте в метод Main следующий код.

// Create a list of accounts. var bankAccounts = new List < new Account < Balance = 541.27 >, new Account < Balance = -127.44 >>; 

Объявление метода, экспортирующего сведения о счетах в Excel

  1. Чтобы настроить лист Excel, добавьте в класс Program следующий метод. У метода Add есть необязательный параметр для указания конкретного шаблона. Необязательные параметры позволяют опустить аргумент для этого параметра, если вы хотите использовать значение по умолчанию параметра. Так как аргумент не задан, Add использует шаблон по умолчанию и создает новую книгу. В эквивалентном операторе в более ранних версиях C# необходимо было использовать аргумент-местозаполнитель ExcelApp.Workbooks.Add(Type.Missing) .
static void DisplayInExcel(IEnumerable accounts) < var excelApp = new Excel.Application(); // Make the object visible. excelApp.Visible = true; // Create a new, empty workbook and add it to the collection returned // by property Workbooks. The new workbook becomes the active workbook. // Add has an optional parameter for specifying a particular template. // Because no argument is sent in this example, Add creates a new workbook. excelApp.Workbooks.Add(); // This example uses a single workSheet. The explicit type casting is // removed in a later procedure. Excel._Worksheet workSheet = (Excel.Worksheet)excelApp.ActiveSheet; >

Добавьте в конец метода DisplayInExcel следующий код. Этот код вставляет значения в первые два столбца первой строки листа.

// Establish column headings in cells A1 and B1. workSheet.Cells[1, "A"] = "ID Number"; workSheet.Cells[1, "B"] = "Current Balance"; 

Добавьте в конец метода DisplayInExcel следующий код. Цикл foreach помещает сведения из списка счетов в первые два столбца последовательных строк листа.

 var row = 1; foreach (var acct in accounts)

Добавьте в конец метода DisplayInExcel следующий код, чтобы ширина столбца изменялась в соответствии с содержимым.

workSheet.Columns[1].AutoFit(); workSheet.Columns[2].AutoFit(); 

В более ранних версиях C# требовалось явное приведение типов для этих операций, поскольку ExcelApp.Columns[1] возвращает тип Object , а метод AutoFit является методом Excel Range. Приведение показано в следующих строках.

((Excel.Range)workSheet.Columns[1]).AutoFit(); ((Excel.Range)workSheet.Columns[2]).AutoFit(); 

C# преобразует возвращаемое Object dynamic значение автоматически, если сборка ссылается на параметр компилятора EmbedInteropTypes или, аналогично, если свойство Excel Embed Interop Types имеет значение true. True является значением по умолчанию для этого свойства.

Запуск проекта

Добавьте в конец метода Main следующую строку.

// Display the list in an Excel spreadsheet. DisplayInExcel(bankAccounts); 

Нажмите клавиши CTRL+F5. Появится книга Excel, содержащая данные о двух счетах.

Добавление документа Word

Следующий код открывает приложение Word и создает значок, который ссылается на лист Excel. Вставьте метод CreateIconInWordDoc , указанный далее в этом шаге, в класс Program . CreateIconInWordDoc использует именованные и необязательные аргументы, чтобы упростить вызовы методов Add и PasteSpecial. Эти вызовы включают две другие функции, которые упрощают вызовы к COM-методам, имеющим ссылочные параметры. Во-первых, аргументы можно передать в ссылочные параметры, как если бы они были параметрами значений. Это значит, что значения можно передавать напрямую без создания переменной для каждого ссылочного параметра. Компилятор создает временные переменные для хранения значений аргументов и уничтожает эти переменные после завершения вызываемого метода. Во-вторых, ключевое слово ref в списке аргументов можно опустить.

У метода Add имеется четыре ссылочных параметра, все из которых являются необязательными. Аргументы для любого или всех параметров можно опустить, если вы хотите использовать их значения по умолчанию.

Метод PasteSpecial вставляет содержимое буфера обмена. У метода имеется семь ссылочных параметров, все из которых являются необязательными. Следующий код задает аргументы для двух из них: Link для создания ссылки на исходное содержимое буфера и DisplayAsIcon для отображения ссылки в виде значка. Для этих двух аргументов можно использовать именованные аргументы и опустить другие. Хотя эти аргументы являются ссылочными параметрами, вам не нужно использовать ref ключевое слово или создавать переменные для отправки в качестве аргументов. Значения можно передать напрямую.

static void CreateIconInWordDoc() < var wordApp = new Word.Application(); wordApp.Visible = true; // The Add method has four reference parameters, all of which are // optional. Visual C# allows you to omit arguments for them if // the default values are what you want. wordApp.Documents.Add(); // PasteSpecial has seven reference parameters, all of which are // optional. This example uses named arguments to specify values // for two of the parameters. Although these are reference // parameters, you do not need to use the ref keyword, or to create // variables to send in as arguments. You can send the values directly. wordApp.Selection.PasteSpecial( Link: true, DisplayAsIcon: true); >

Добавьте в конец метода Main следующую инструкцию.

// Create a Word document that contains an icon that links to // the spreadsheet. CreateIconInWordDoc(); 

Добавьте в конец метода DisplayInExcel следующую инструкцию. Метод Copy добавляет лист в буфер обмена.

// Put the spreadsheet contents on the clipboard. The Copy method has one // optional parameter for specifying a destination. Because no argument // is sent, the destination is the Clipboard. workSheet.Range["A1:B3"].Copy(); 

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

Задание свойства «Внедрить типы взаимодействия»

Дополнительные улучшения возможны при вызове типа COM, который не требует основной сборки взаимодействия (PIA) во время выполнения. Избавление от зависимостей от PIA приводит к независимости версий и делает развертывание более простым. Дополнительные сведения о преимуществах программирования без основных сборок взаимодействия см. в разделе Пошаговое руководство. Внедрение данных о типах из управляемых сборок.

Кроме того, программирование проще, так как dynamic тип представляет необходимые и возвращаемые типы, объявленные в методах COM. Переменные, имеющие тип dynamic , не оцениваются до времени выполнения, что устраняет необходимость явного приведения. Дополнительные сведения см. в разделе Использование типа dynamic.

Внедрение сведений о типе вместо использования ЛИЧНЫХ данных — это поведение по умолчанию. Из-за этого по умолчанию несколько предыдущих примеров упрощены. Вам не требуется явное приведение. Например, объявление worksheet в методе DisplayInExcel записывается как Excel._Worksheet workSheet = excelApp.ActiveSheet , а не как Excel._Worksheet workSheet = (Excel.Worksheet)excelApp.ActiveSheet . Для вызовов AutoFit в рамках одного метода также требовалось бы явное приведение без поведения по умолчанию, поскольку ExcelApp.Columns[1] возвращает тип Object , а AutoFit является методом Excel. Приведение показано в следующем примере.

((Excel.Range)workSheet.Columns[1]).AutoFit(); ((Excel.Range)workSheet.Columns[2]).AutoFit(); 

Чтобы изменить значения по умолчанию и использовать пиА вместо внедрения сведений о типе, разверните узел «Ссылки» в Обозреватель решений, а затем выберите Microsoft.Office.Interop.Excel или Microsoft.Office.Interop.Word. Если окно свойств не отображается, нажмите клавишу F4. В списке свойств найдите свойство Внедрить типы взаимодействия и измените его значение на False. Также можно выполнить компиляцию с помощью командной строки с использованием параметра компилятора References вместо EmbedInteropTypes.

Дополнительное форматирование таблицы

Замените два вызова AutoFit в методе DisplayInExcel следующей инструкцией.

// Call to AutoFormat in Visual C# 2010. workSheet.Range["A1", "B3"].AutoFormat( Excel.XlRangeAutoFormat.xlRangeAutoFormatClassic2); 

У метода AutoFormat имеется семь параметров значений, и все они являются необязательными. Именованные и необязательные аргументы позволяют задать аргументы для всех параметров, их части или ни для одного параметра. В предыдущем операторе приведен аргумент только для одного из параметров Format . Так как Format это первый параметр в списке параметров, вам не нужно указать имя параметра. Однако оператор может быть проще понять, если вы включаете имя параметра, как показано в следующем коде.

// Call to AutoFormat in Visual C# 2010. workSheet.Range["A1", "B3"].AutoFormat(Format: Excel.XlRangeAutoFormat.xlRangeAutoFormatClassic2); 

Нажмите сочетание клавиш CTRL + F5, чтобы увидеть результат. Другие форматы можно найти в перечислении XlRangeAutoFormat .

Пример

Ниже приведен полный пример кода.

using System.Collections.Generic; using Excel = Microsoft.Office.Interop.Excel; using Word = Microsoft.Office.Interop.Word; namespace OfficeProgrammingWalkthruComplete < class Walkthrough < static void Main(string[] args) < // Create a list of accounts. var bankAccounts = new List< new Account < Balance = 541.27 >, new Account < Balance = -127.44 >>; // Display the list in an Excel spreadsheet. DisplayInExcel(bankAccounts); // Create a Word document that contains an icon that links to // the spreadsheet. CreateIconInWordDoc(); > static void DisplayInExcel(IEnumerable accounts) < var excelApp = new Excel.Application(); // Make the object visible. excelApp.Visible = true; // Create a new, empty workbook and add it to the collection returned // by property Workbooks. The new workbook becomes the active workbook. // Add has an optional parameter for specifying a particular template. // Because no argument is sent in this example, Add creates a new workbook. excelApp.Workbooks.Add(); // This example uses a single workSheet. Excel._Worksheet workSheet = excelApp.ActiveSheet; // Earlier versions of C# require explicit casting. //Excel._Worksheet workSheet = (Excel.Worksheet)excelApp.ActiveSheet; // Establish column headings in cells A1 and B1. workSheet.Cells[1, "A"] = "ID Number"; workSheet.Cells[1, "B"] = "Current Balance"; var row = 1; foreach (var acct in accounts) < row++; workSheet.Cells[row, "A"] = acct.ID; workSheet.Cells[row, "B"] = acct.Balance; >workSheet.Columns[1].AutoFit(); workSheet.Columns[2].AutoFit(); // Call to AutoFormat in Visual C#. This statement replaces the // two calls to AutoFit. workSheet.Range["A1", "B3"].AutoFormat( Excel.XlRangeAutoFormat.xlRangeAutoFormatClassic2); // Put the spreadsheet contents on the clipboard. The Copy method has one // optional parameter for specifying a destination. Because no argument // is sent, the destination is the Clipboard. workSheet.Range["A1:B3"].Copy(); > static void CreateIconInWordDoc() < var wordApp = new Word.Application(); wordApp.Visible = true; // The Add method has four reference parameters, all of which are // optional. Visual C# allows you to omit arguments for them if // the default values are what you want. wordApp.Documents.Add(); // PasteSpecial has seven reference parameters, all of which are // optional. This example uses named arguments to specify values // for two of the parameters. Although these are reference // parameters, you do not need to use the ref keyword, or to create // variables to send in as arguments. You can send the values directly. wordApp.Selection.PasteSpecial(Link: true, DisplayAsIcon: true); >> public class Account < public int ID < get; set; >public double Balance < get; set; >> > 

См. также

  • Type.Missing
  • Динамический
  • Именованные и необязательные аргументы
  • Использование именованных и необязательных аргументов в программировании приложений Office

Совместная работа с нами на GitHub

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

Использование элементов управления WPF в решениях Office

Область применения:yesVisual Studio Visual Studio для Mac noVisual Studio Code no

Хотя решения, созданные с помощью средств разработки Office в Visual Studio, предназначены для работы непосредственно с элементами управления Windows Forms, в них также можно использовать элементы управления WPF. Windows Presentation Foundation (WPF) — это альтернатива Windows Forms для разработки пользовательских интерфейсов. WPF использует язык разметки XAML для реализации новых методов включения элементов пользовательского интерфейса, объектов мультимедиа и документов. Дополнительные сведения см. в обзоре WPF.

Область применения. Сведения в этом разделе относятся к проектам уровня документа и проектам надстроек VSTO. См. сведения о функциях, доступных по Приложение Office и типу проекта.

Любой элемент пользовательского интерфейса, который может содержать элементы управления Windows Forms в решении Office, может содержать и элементы управления WPF. Это могут быть следующие элементы:

  • документы и книги в настройках уровня документа;
  • панели действий в настройках уровня документа;
  • настраиваемые области задач в надстройках VSTO;
  • области формы в надстройках VSTO для Outlook.

Добавление элементов управления WPF в проекты Office во время разработки

Невозможно добавить элементы управления WPF напрямую в элементы пользовательского интерфейса в решениях Office. Вместо этого добавьте элемент пользовательского элемента управления (WPF) в проект и используйте его в качестве области конструктора для элементов управления WPF. Затем добавьте пользовательский элемент управления WPF в элемент пользовательского интерфейса в проекте.

Добавление элементов управления WPF в панель действий, настраиваемую область задач или область формы

  1. Откройте проект, в который требуется добавить настраиваемую область задач, панель действий или область формы.
  2. Добавьте элемент пользовательского элемента управления (WPF) в проект.
  3. На панели элементов добавьте элементы управления WPF в область конструктора пользовательского элемента управления WPF. По умолчанию при открытии конструктора пользовательского элемента управления WPF панель элементов содержит только элементы управления WPF.
  4. Выполните сборку проекта.
  5. Добавьте в проект панель действий, область формы или настраиваемую область задач:
    • Для областей форм добавьте в проект элемент области формы Outlook. Дополнительные сведения см. в статье «Практическое руководство. Добавление области формы в проект надстройки Outlook».
    • Для областей действий добавьте элемент управления области действий или элемента пользовательского элемента управления в проект. Дополнительные сведения см. в статье «Практическое руководство. Добавление области действий в документы Word или книги Excel».
    • Для пользовательских областей задач добавьте элемент пользовательского элемента управления в проект. Дополнительные сведения см. в статье «Практическое руководство. Добавление настраиваемой области задач в приложение».
  6. На вкладке «Элементы управления пользователем PROJECTNameWPF» на панели элементов перетащите элемент управления WPF в конструктор области действий, области форм или настраиваемую область задач. Visual Studio автоматически создает объект ElementHost, в котором размещается пользовательский элемент управления WPF, в элементе пользовательского интерфейса.
  7. Выполните повторную сборку проекта.
Добавление элементов управления WPF в документ или на лист в проекте уровня документа
  1. Откройте проект уровня документа для Word или Excel.
  2. Добавьте элемент пользовательского элемента управления (WPF) в проект.
  3. На панели элементов добавьте элементы управления WPF в область конструктора пользовательского элемента управления WPF.
  4. Выполните сборку проекта.
  5. Добавьте элемент пользовательского элемента управления (то есть пользовательского элемента управления Windows Forms) в проект.
  6. Откройте конструктор пользовательского элемента управления Windows Forms.
  7. На вкладке «Элементы управления пользователем WPF ProjectNameWPF» на панели элементов перетащите пользовательский элемент управления WPF в конструктор. Visual Studio автоматически создает объект ElementHost, в котором размещается пользовательский элемент управления WPF, в пользовательском элементе управления Windows Forms.
  8. Напишите код, который программными средствами добавляет пользовательский элемент управления Windows Forms в документ или на лист. Дополнительные сведения см. в разделе «Добавление элементов управления в документы Office во время выполнения».

Примечание. В конструкторе невозможно перетащить пользовательский элемент управления Windows Forms в документ или на лист.

Элементы управления WPF узла с помощью класса ElementHost

Visual Studio предоставляет средства, помогающие использовать элементы управления Windows Forms в решениях Office, но не предоставляет аналогичные функциональные возможности для элементов управления WPF. Например, можно добавлять элементы управления Windows Forms в документы и листы во время разработки, перетаскивая элементы управления из панели элементов или во время выполнения с помощью вспомогательных методов. Однако эти средства недоступны для элементов управления WPF.

Элементы управления WPF используют класс ElementHost как уровень интеграции между элементом управления или формой Windows Forms и элементом управления WPF. При добавлении элементов управления WPF в решение во время разработки Visual Studio автоматически создает объект ElementHost.

Ресурсы WPF

Дополнительные сведения об архитектуре и проектировании для размещения элементов управления WPF в элементах управления и формах Windows Forms см. в следующих разделах:

  • Входная архитектура взаимодействия Windows Forms и WPF
  • Сопоставление свойств Windows Forms и WPF
  • Взаимодействие WPF и Windows Forms
  • Элементы управления Windows Forms и эквивалентные элементы управления WPF

Дополнительные сведения о добавлении элементов управления WPF к элементам управления и формам Windows Forms в Visual Studio во время разработки см. в следующих разделах:

  • Пошаговое руководство. Создание нового содержимого WPF в Windows Forms во время разработки
  • Пошаговое руководство. Упорядочить содержимое WPF в Windows Forms во время разработки
  • Пошаговое руководство. Стиль содержимого WPF

Связанный контент

  • Настройка пользовательского интерфейса Office
  • Общие сведения об элементах управления Windows Forms в документах Office
  • Обзор области действий
  • Пользовательские области задач
  • Создание областей форм Outlook
  • Практическое руководство. Добавление области действий в документы Word или книги Excel
  • Практическое руководство. Добавление настраиваемой области задач в приложение
  • Практическое руководство. Добавление области формы в проект надстройки Outlook

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *