Пошаговое руководство. Привязка данных к элементам управления на панели действий Word
Область применения:
Visual Studio Visual Studio для Mac
Visual Studio Code ![]()
В этом пошаговом руководстве демонстрируется привязка данных к элементам управления на панели действий в Word. Элементы управления показывают отношение «Основной/подробности» между таблицами в базе данных SQL Server.
Область применения. Сведения в этом разделе относятся к проектам уровня документа для Word. Дополнительные сведения см. в разделе «Функции», доступные по Приложение Office ликации и типу проекта.
В этом пошаговом руководстве рассматриваются следующие задачи:
- Создание области действий с элементами управления Windows Forms, привязанными к данным.
- Использование главного или подробного отношения для отображения данных в элементах управления.
- Отображение области действий при открытии приложения.
Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Персонализация интегрированной среды разработки Visual Studio.
Необходимые компоненты
Для выполнения этого пошагового руководства требуются следующие компоненты:
- Выпуск Visual Studio, включающий инструменты разработчика Microsoft Office. Дополнительные сведения см. в статье «Настройка компьютера для разработки решений Office».
- Word 2013 или Word 2010.
- Доступ к серверу с примером базы данных SQL Server Northwind.
- Разрешения на чтение и запись в базу данных SQL Server.
Создание проекта
Первым шагом является создание документа Word.
Создание проекта
- Создайте проект Word Document с именем области «Мои действия Word». В мастере выберите «Создать новый документ«. Дополнительные сведения см. в статье «Практическое руководство. Создание проектов Office в Visual Studio». Visual Studio открывает новый документ Word в конструкторе и добавляет проект области действий «Мои слова» в Обозреватель решений.
Добавление элементов управления в область действий
Для этого пошагового руководства вам потребуется элемент управления области действий, содержащий элементы управления Windows Forms с привязкой к данным. Добавьте источник данных в проект и перетащите элементы управления из окна «Источники данных» в область действий.
Добавление элемента управления панели действий
- Выберите проект области действий «Мои слова» в Обозреватель решений.
- В меню Проект выберите Добавить новый элемент.
- В диалоговом окне «Добавить новый элемент» выберите элемент управления «Области действий», назовите его ActionsControl и нажмите кнопку «Добавить«.
Добавление источника данных в проект
- Если окно «Источники данных» не отображается, отобразите его в строке меню, выбрав «Просмотреть>другие источники данных Windows>«.
Примечание. Если отображение источников данных недоступно, щелкните документ Word и снова проверка.
Добавление элементов управления Windows Forms с привязкой к данным в элемент управления области действий
- В окне «Источники данных» разверните таблицу «Поставщики«.
- Щелкните стрелку раскрывающегося списка на узле «Имя компании» и выберите ComboBox.
- Перетащите имя компании из окна источников данных в элемент управления областью действий. Элемент управления «Область действий» ComboBox создается на панели действий. В то же время именованный BindingSource SuppliersBindingSource адаптер таблицы и объект DataSet добавляются в проект в области компонентов.
- Выберите SuppliersBindingNavigator в области компонентов и нажмите клавишу DELETE. Вы не будете использовать этот пошаговое SuppliersBindingNavigator руководство.
Примечание. Удаление SuppliersBindingNavigator не удаляет весь код, созданный для него. Этот код можно удалить.
| Свойство | Значение |
|---|---|
| Имя | Insert |
| Text | Insert |
Настройка источника данных.
Чтобы настроить источник данных, добавьте код Load в событие элемента управления области действий, чтобы заполнить элемент управления данными из элемента DataTableуправления и задать DataSourceDataMember свойства для каждого элемента управления.
Загрузка элемента управления с данными
- Load В обработчике ActionsControl событий класса добавьте следующий код.
private void ActionsControl_Load(object sender, EventArgs e)
Private Sub ActionsControl_Load(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles Me.Load Me.SuppliersTableAdapter.Fill(Me.NorthwindDataSet.Suppliers) Me.ProductsTableAdapter.Fill(Me.NorthwindDataSet.Products) End Sub
this.Load += new EventHandler(ActionsControl_Load);
Задание свойств привязки данных элементов управления
- Выберите элемент управления CompanyNameComboBox .
- В окне «Свойства» нажмите кнопку справа от свойства DataSource и выберите поставщиковBindingSource.
- Нажмите кнопку справа от свойства DisplayMember и выберите CompanyName.
- Разверните свойство DataBindings, нажмите кнопку справа от свойства Text и выберите None.
- Выберите элемент управления ProductNameListBox .
- В окне «Свойства» нажмите кнопку справа от свойства DataSource и выберите productsBindingSource.
- Нажмите кнопку справа от свойства DisplayMember и выберите ProductName.
- Разверните свойство DataBindings, нажмите кнопку справа от свойства SelectedValue и выберите None.
Добавление метода вставки данных в таблицу
Следующая задача — считывать данные из связанных элементов управления и заполнять таблицу в документе Word. Сначала создайте процедуру форматирования заголовков в таблице, а затем добавьте AddData метод для создания и форматирования таблицы Word.
Форматирование заголовков таблицы
- ActionsControl В классе создайте метод для форматирования заголовков таблицы.
static void SetHeadings(Microsoft.Office.Interop.Word.Cell tblCell, string text)
Shared Sub SetHeadings(ByVal tblCell As Word.Cell, ByVal text As String) With tblCell.Range .Text = text .Font.Bold = True .ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter End With End Sub
Создание таблицы
- ActionsControl В классе напишите метод, который создаст таблицу, если она еще не существует, и добавьте данные из области действий в таблицу.
private void AddData(System.Data.DataRow row, string companyName) < object missing = System.Type.Missing; // Create a table if it doesn't already exist. if (Globals.ThisDocument.Tables.Count == 0) < try < // Create a table. Microsoft.Office.Interop.Word.Table tbl = Globals.ThisDocument.Tables.Add (Globals.ThisDocument.Application.Selection.Range, 1, 4, ref missing, ref missing); // Insert headings. SetHeadings(tbl.Cell(1, 1), "Company Name"); SetHeadings(tbl.Cell(1, 2), "Product Name"); SetHeadings(tbl.Cell(1, 3), "Quantity"); SetHeadings(tbl.Cell(1, 4), "Unit Price"); >catch (Exception ex) < MessageBox.Show("Problem creating Products table: " + ex.Message, "Actions Pane", MessageBoxButtons.OK, MessageBoxIcon.Error); >> // Add data from data row to the table. Microsoft.Office.Interop.Word.Selection selection = Globals.ThisDocument.Application.Selection; if (selection.Tables.Count > 0) < Microsoft.Office.Interop.Word.Row newRow = Globals.ThisDocument.Tables[1].Rows.Add(ref missing); newRow.Range.Font.Bold = 0; newRow.Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphLeft; newRow.Cells[4].Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphRight; newRow.Cells[1].Range.Text = companyName; newRow.Cells[2].Range.Text = row["ProductName"].ToString(); newRow.Cells[3].Range.Text = row["QuantityPerUnit"].ToString(); newRow.Cells[4].Range.Text = Math.Round(Convert.ToDouble(row["UnitPrice"])).ToString("#,##0.00"); >else < MessageBox.Show("Cursor must be within a table.", "Actions Pane", MessageBoxButtons.OK, MessageBoxIcon.Error); >>
Private Sub AddData(ByVal row As System.Data.DataRow, ByVal companyName As String) ' Create a table if it doesn't already exist. If Globals.ThisDocument.Tables.Count = 0 Then Try ' Create a table. Dim tbl As Word.Table = Globals.ThisDocument.Tables.Add( _ Globals.ThisDocument.Application.Selection.Range, 1, 4) ' Insert headings. SetHeadings(tbl.Cell(1, 1), "Company Name") SetHeadings(tbl.Cell(1, 2), "Product Name") SetHeadings(tbl.Cell(1, 3), "Quantity") SetHeadings(tbl.Cell(1, 4), "Unit Price") Catch ex As Exception MessageBox.Show("Problem creating Products table: " & ex.Message, _ "Actions Pane", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End If ' Add data from data row to the table. Dim selection As Word.Selection = Globals.ThisDocument.Application.Selection If selection.Tables.Count > 0 Then Dim newRow As Word.Row = Globals.ThisDocument.Tables(1).Rows.Add() With newRow .Range.Font.Bold = False .Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft .Cells(4).Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight .Cells(1).Range.Text = companyName .Cells(2).Range.Text = row.Item("ProductName").ToString .Cells(3).Range.Text = row.Item("QuantityPerUnit").ToString .Cells(4).Range.Text = Math.Round(row.Item("UnitPrice"), 2) End With Else MessageBox.Show("Cursor must be within a table.", _ "Actions Pane", MessageBoxButtons.OK, MessageBoxIcon.Error) End If End Sub
Вставка текста в таблицу Word
- Добавьте следующий код в Click обработчик событий кнопки «Вставка «.
private void Insert_Click(object sender, System.EventArgs e) < System.Data.DataTable tbl = northwindDataSet.Products; System.Data.DataRow[] rows; // Check if a product is selected. if (this.productNameListBox.SelectedIndex >= 0) < System.Data.DataRowView productRow = (System.Data.DataRowView)this.productNameListBox.SelectedItem; string product = productRow.Row["ProductName"].ToString(); string company = this.companyNameComboBox.Text; // Return the data row from the selected product. rows = tbl.Select("[ProductName] = '" + product.Replace("'", "''") + "'"); this.AddData(rows[0], company); >else < MessageBox.Show("Please select a product.", "Actions Pane", MessageBoxButtons.OK); >>
Private Sub Insert_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Insert.Click Dim tbl As System.Data.DataTable = NorthwindDataSet.Products Dim rows() As System.Data.DataRow ' Check if a product is selected. If Not Me.ProductNameListBox.SelectedIndex < 0 Then Dim product As String = Me.ProductNameListBox.SelectedItem.Row.Item("ProductName") Dim company As String = Me.CompanyNameComboBox.Text ' Return the data row from the selected Product in the list box. rows = tbl.Select("[ProductName] = '" & product.Replace("'", "''") & "'") AddData(rows(0), company) Else MessageBox.Show("Please select a product.", "Actions Pane", MessageBoxButtons.OK) End If End Sub
this.Insert.Click += new EventHandler(Insert_Click);
Отображение области действий
Область действий становится видимой после добавления элементов управления в нее.
Отображение области действий
- В Обозреватель решений щелкните правой кнопкой мыши ThisDocument.vb или ThisDocument.cs, а затем выберите команду Просмотреть код в контекстном меню.
- Создайте новый экземпляр элемента управления в верхней части ThisDocument класса, чтобы он выглядел следующим образом.
private ActionsControl actions = new ActionsControl();
Dim actions As New ActionsControl
this.ActionsPane.Controls.Add(actions);
Me.ActionsPane.Controls.Add(actions)
Тестирование приложения
Теперь вы можете протестировать документ, чтобы убедиться, что область действий отображается при открытии документа. Проверьте связь master/detail в элементах управления на панели действий и убедитесь, что данные заполняются в таблице Word при нажатии кнопки "Вставка ".
Проверка документа
- Нажмите клавишу F5 для запуска проекта.
- Убедитесь, что область действий отображается.
- Выберите компанию в поле со списком и убедитесь, что элементы в списке "Продукты ".
- Выберите продукт, нажмите кнопку "Вставить " на панели действий и убедитесь, что сведения о продукте добавлены в таблицу в Word.
- Вставка дополнительных продуктов из различных компаний.
Следующие шаги
В этом пошаговом руководстве показаны основы привязки данных для элементов управления на панели действий в Word. Ниже приводятся некоторые из возможных последующих задач.
- Привязка данных к элементам управления в Excel. Дополнительные сведения см. в пошаговом руководстве. Привязка данных к элементам управления на панели действий Excel.
- Развертывание проекта. Дополнительные сведения см. в статье "Развертывание решения Office с помощью ClickOnce".
Связанный контент
- Обзор области действий
- Практическое руководство. Добавление области действий в документы Word или книги Excel
- Привязка данных к элементам управления в решениях Office
Автоматизация Word из Visual Basic .NET для создания нового документа
В этой пошаговой статье описывается создание нового документа в Word с помощью службы автоматизации из Visual Basic .NET.
Пример кода
В примере кода в этой статье показано, как сделать следующее:
- Вставка абзацев с текстом и форматированием.
- Просмотр и изменение различных диапазонов в документе.
- Вставка таблиц, форматирование таблиц и заполнение таблиц данными.
- Добавление диаграммы.
Чтобы создать документ Word с помощью службы автоматизации из Visual Basic .NET, выполните следующие действия.
- Запустите Microsoft Visual Studio .NET. В меню Файл выберите пункт Создать, а затем — Проект. В разделе Типы проектов выберите Проекты Visual Basic, а затем — Приложение Windows в разделе Шаблоны. Форма Form1 создается по умолчанию.
- Добавьте ссылку на библиотеку объектов Microsoft Word. Для этого выполните следующие действия:
- В меню Проект щелкните Добавить ссылку.
- На вкладке COM найдите библиотеку объектов Microsoft Word и нажмите кнопку Выбрать.
Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click End Sub
Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim oWord As Word.Application Dim oDoc As Word.Document Dim oTable As Word.Table Dim oPara1 As Word.Paragraph, oPara2 As Word.Paragraph Dim oPara3 As Word.Paragraph, oPara4 As Word.Paragraph Dim oRng As Word.Range Dim oShape As Word.InlineShape Dim oChart As Object Dim Pos As Double 'Start Word and open the document template. oWord = CreateObject("Word.Application") oWord.Visible = True oDoc = oWord.Documents.Add 'Insert a paragraph at the beginning of the document. oPara1 = oDoc.Content.Paragraphs.Add oPara1.Range.Text = "Heading 1" oPara1.Range.Font.Bold = True oPara1.Format.SpaceAfter = 24 '24 pt spacing after paragraph. oPara1.Range.InsertParagraphAfter() 'Insert a paragraph at the end of the document. '** \endofdoc is a predefined bookmark. oPara2 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks.Item("\endofdoc").Range) oPara2.Range.Text = "Heading 2" oPara2.Format.SpaceAfter = 6 oPara2.Range.InsertParagraphAfter() 'Insert another paragraph. oPara3 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks.Item("\endofdoc").Range) oPara3.Range.Text = "This is a sentence of normal text. Now here is a table:" oPara3.Range.Font.Bold = False oPara3.Format.SpaceAfter = 24 oPara3.Range.InsertParagraphAfter() 'Insert a 3 x 5 table, fill it with data, and make the first row 'bold and italic. Dim r As Integer, c As Integer oTable = oDoc.Tables.Add(oDoc.Bookmarks.Item("\endofdoc").Range, 3, 5) oTable.Range.ParagraphFormat.SpaceAfter = 6 For r = 1 To 3 For c = 1 To 5 oTable.Cell(r, c).Range.Text = "r" & r & "c" & c Next Next oTable.Rows.Item(1).Range.Font.Bold = True oTable.Rows.Item(1).Range.Font.Italic = True 'Add some text after the table. 'oTable.Range.InsertParagraphAfter() oPara4 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks.Item("\endofdoc").Range) oPara4.Range.InsertParagraphBefore() oPara4.Range.Text = "And here's another table:" oPara4.Format.SpaceAfter = 24 oPara4.Range.InsertParagraphAfter() 'Insert a 5 x 2 table, fill it with data, and change the column widths. oTable = oDoc.Tables.Add(oDoc.Bookmarks.Item("\endofdoc").Range, 5, 2) oTable.Range.ParagraphFormat.SpaceAfter = 6 For r = 1 To 5 For c = 1 To 2 oTable.Cell(r, c).Range.Text = "r" & r & "c" & c Next Next oTable.Columns.Item(1).Width = oWord.InchesToPoints(2) 'Change width of columns 1 & 2 oTable.Columns.Item(2).Width = oWord.InchesToPoints(3) 'Keep inserting text. When you get to 7 inches from top of the 'document, insert a hard page break. Pos = oWord.InchesToPoints(7) oDoc.Bookmarks.Item("\endofdoc").Range.InsertParagraphAfter() Do oRng = oDoc.Bookmarks.Item("\endofdoc").Range oRng.ParagraphFormat.SpaceAfter = 6 oRng.InsertAfter("A line of text") oRng.InsertParagraphAfter() Loop While Pos >= oRng.Information(Word.WdInformation.wdVerticalPositionRelativeToPage) oRng.Collapse(Word.WdCollapseDirection.wdCollapseEnd) oRng.InsertBreak(Word.WdBreakType.wdPageBreak) oRng.Collapse(Word.WdCollapseDirection.wdCollapseEnd) oRng.InsertAfter("We're now on page 2. Here's my chart:") oRng.InsertParagraphAfter() 'Insert a chart and change the chart. oShape = oDoc.Bookmarks.Item("\endofdoc").Range.InlineShapes.AddOLEObject( _ ClassType:="MSGraph.Chart.8", FileName _ :="", LinkToFile:=False, DisplayAsIcon:=False) oChart = oShape.OLEFormat.Object oChart.charttype = 4 'xlLine = 4 oChart.Application.Update() oChart.Application.Quit() 'If desired, you can proceed from here using the Microsoft Graph 'Object model on the oChart object to make additional changes to the 'chart. oShape.Width = oWord.InchesToPoints(6.25) oShape.Height = oWord.InchesToPoints(3.57) 'Add text after the chart. oRng = oDoc.Bookmarks.Item("\endofdoc").Range oRng.InsertParagraphAfter() oRng.InsertAfter("THE END.") 'All done. Close this form. Me.Close() End SubImports Word = Microsoft.Office.Interop.Word
После завершения кода изучите документ, созданный для вас. Документ содержит две страницы отформатированных абзацев, таблиц и диаграммы.
Использование шаблона
Если вы используете службу автоматизации для создания документов в общем формате, вы можете начать процесс с нового документа, основанного на предварительно отформатованном шаблоне. Использование шаблона с клиентом службы автоматизации Word имеет два существенных преимущества по сравнению с созданием документа из ничего:
- Вы можете иметь больший контроль над форматированием и размещением объектов в документах.
- Вы можете создавать документы с меньшим количеством кода.
С помощью шаблона можно точно настроить размещение таблиц, абзацев и других объектов в документе, а также включить форматирование этих объектов. С помощью службы автоматизации можно создать новый документ на основе шаблона с таким кодом:
oWord.Documents.Add "\MyTemplate.dot"
В шаблоне можно определить закладки, чтобы клиент службы автоматизации смог заполнить текст переменной в определенном расположении в документе следующим образом:
oDoc.Bookmarks.Item("MyBookmark").Range.Text = "Some Text Here"Еще одно преимущество использования шаблона заключается в том, что вы можете создавать и хранить стили форматирования, которые необходимо применять во время выполнения, следующим образом:
oDoc.Bookmarks.Item("MyBookmark").Range.Style = "MyStyle"oWord.Selection.Style = "MyStyle"
Ссылки
Чтобы получить дополнительные сведения об использовании Visual Basic .NET для автоматизации Microsoft Word, щелкните следующий номер статьи, чтобы просмотреть статью в базе знаний Майкрософт:
301656 Автоматизация Word для выполнения слияния из Visual Basic .NET
Microsoft.Office.Interop.Word как установить
Установлена 13 студия максимальная, хочу добавить в проект ссылку на пакет Microsoft.Office.Interop.Word, но его там нету. Весь пакет офиса 2007 установлен на компе. Вопрос Где искать этот пакет и как потом его добавлять, чтобы он отображался в ссылках добавляемых пакетов
Отслеживать
задан 8 мар 2017 в 15:16
748 1 1 золотой знак 8 8 серебряных знаков 25 25 бронзовых знаков1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Правый клик на References --> Add Reference , затем перейти на вкладку COM , в поле поиска для Excel вбить Microsoft Excel .
Отслеживать
ответ дан 8 мар 2017 в 15:39
5,279 3 3 золотых знака 22 22 серебряных знака 39 39 бронзовых знаков- c#
- wpf
-
Важное на Мете
Связанные
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.3.2953
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Пошаговое руководство. Программирование Office в C#
C# предлагает функции, которые улучшают программирование Microsoft Office. В число полезных функций C# входят именованные и необязательные аргументы и возвращаемые значения типа dynamic . В программировании COM можно опустить ключевое слово ref и получить доступ к индексированным свойствам.
Оба языка поддерживают внедрение сведений о типах, что позволяет развертывать сборки, взаимодействующие с компонентами COM, без предварительного развертывания на компьютере основных сборок взаимодействия (PIA). Дополнительные сведения см. в разделе Пошаговое руководство. Внедрение данных о типах из управляемых сборок.
В данном пошаговом руководстве эти возможности показаны в контексте программирования для Microsoft Office, но многие из них могут оказаться полезными и в других ситуациях. В этом пошаговом руководстве вы создадите книгу Excel с помощью надстройки Excel, а затем документ Word со ссылкой на эту книгу. Наконец, вы узнаете, как включать и отключать зависимость PIA.
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.
Необходимые компоненты
Для выполнения данного пошагового руководства на компьютере должны быть установлены Microsoft Office Excel и Microsoft Office Word.
Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Персонализация среды IDE.
Настройка приложения надстройки Excel
- Запустите среду Visual Studio.
- В меню Файл последовательно выберите команды Создатьи Проект.
- В области установленных шаблонов разверните узел C#, развернитеOffice и выберите год версии продукта Office.
- В области "Шаблоны" выберите надстройку версии> Excel
- Убедитесь, что в верхней части области Шаблоны в поле Требуемая версия .NET Framework отображается .NET Framework 4 или более поздняя версия.
- Если нужно, в поле Имя введите имя проекта.
- Нажмите ОК.
- В обозревателе решений появится новый проект.
Добавление ссылок
- В Обозреватель решений щелкните правой кнопкой мыши имя проекта и нажмите кнопку "Добавить ссылку". Откроется диалоговое окно Добавление ссылки.
- На вкладке Сборки в списке Имя компонента выберите Microsoft.Office.Interop.Excel, версия .0.0.0 (расшифровку номеров версий продуктов Office см. в разделе Версии Майкрософт), а затем, удерживая нажатой клавишу CTRL, выберите Microsoft.Office.Interop.Word, version .0.0.0 . Если сборки не отображаются, их может потребоваться установить (см . инструкции по установке основных сборок взаимодействия Office).
- Нажмите ОК.
Добавление необходимых инструкций Import или директив using
В Обозреватель решений щелкните правой кнопкой мыши файл ThisAddIn.cs и выберите команду View Code. Добавьте следующие using директивы (C#) в начало файла кода, если они еще не присутствуют.
using System.Collections.Generic; using Excel = Microsoft.Office.Interop.Excel; using Word = Microsoft.Office.Interop.Word;Создание списка банковских счетов
В Обозреватель решений щелкните правой кнопкой мыши имя проекта, выберите "Добавить" и выберите "Класс". Назовите класс Account.cs. Выберите Добавить. Замените определение класса Account следующим кодом. В определениях классов используются автоматически реализуемые свойства.
class Account < public int ID < get; set; >public double Balance < get; set; >>Чтобы создать bankAccounts список, содержащий две учетные записи, добавьте следующий код в ThisAddIn_Startup метод в ThisAddIn.cs. В объявлениях списков используются инициализаторы коллекций.
var bankAccounts = new List < new Account < Balance = 541.27 >, new Account < Balance = -127.44 >>;Экспорт данных в Excel
В том же самом файле добавьте в класс ThisAddIn следующий метод. Этот метод служит для настройки книги Excel и экспорта данных в нее.
void DisplayInExcel(IEnumerable accounts, Action DisplayFunc) < var excelApp = this.Application; // Add a new Excel workbook. excelApp.Workbooks.Add(); excelApp.Visible = true; excelApp.Range["A1"].Value = "ID"; excelApp.Range["B1"].Value = "Balance"; excelApp.Range["A2"].Select(); foreach (var ac in accounts) < DisplayFunc(ac, excelApp.ActiveCell); excelApp.ActiveCell.Offset[1, 0].Select(); >// Copy the results to the Clipboard. excelApp.Range["A1:B3"].Copy(); >- У метода Add есть необязательный параметр для указания конкретного шаблона. Необязательные параметры позволяют опустить аргумент для этого параметра, если вы хотите использовать значение по умолчанию параметра. Так как предыдущий пример не имеет аргументов, Add использует шаблон по умолчанию и создает новую книгу. В эквивалентном операторе в более ранних версиях C# необходимо было использовать аргумент-местозаполнитель excelApp.Workbooks.Add(Type.Missing) . Дополнительные сведения см. в разделе Именованные и необязательные аргументы.
- Свойства Range и Offset объекта Range используют возможность индексированных свойств. Она позволяет использовать свойства типов COM с помощью стандартного синтаксиса C#. Кроме того, индексированные свойства позволяют использовать свойство Value объекта Range , устраняя необходимость в использовании свойства Value2 . Свойство Value является индексированным, но индекс — необязательным. Совместная работа необязательных аргументов и индексированных свойств показана в следующем примере.
// Visual C# 2010 provides indexed properties for COM programming. excelApp.Range["A1"].Value = "ID"; excelApp.ActiveCell.Offset[1, 0].Select();Не удается создать индексированные свойства собственных. Эта возможность поддерживает только использование имеющихся индексированных свойств.
Добавьте в конец метода DisplayInExcel следующий код, чтобы ширина столбца изменялась в соответствии с содержимым.
excelApp.Columns[1].AutoFit(); excelApp.Columns[2].AutoFit();Эти дополнения демонстрируют еще одну возможность C#: значения Object , возвращаемые главными приложениями COM, например приложениями Office, и обрабатываются так, как если бы они имели тип dynamic. COM-объекты обрабатываются автоматически dynamic , если типы взаимодействия внедрения имеют значение по умолчанию или True , аналогично, при ссылке на сборку с параметром компилятора EmbedInteropTypes . Дополнительные сведения о внедрении типов взаимодействия см. в процедурах "Поиск ссылки на PIA" и "Восстановление зависимости PIA" далее в этой статье. Дополнительные сведения о dynamic см. в разделе dynamic или Использование типа dynamic.
Вызов DisplayInExcel
Добавьте следующий код в конец метода ThisAddIn_StartUp . Вызов метода DisplayInExcel содержит два аргумента. Первым аргументом является имя списка обработанных учетных записей. Второй аргумент — это многостроочное лямбда-выражение, определяющее способ обработки данных. Значения ID и balance для каждого из счетов отображаются в соседних ячейках, а если баланс имеет отрицательное значение, строка отображается красным. Дополнительные сведения см. в разделе Лямбда-выражения.
DisplayInExcel(bankAccounts, (account, cell) => // This multiline lambda expression sets custom processing rules // for the bankAccounts. < cell.Value = account.ID; cell.Offset[0, 1].Value = account.Balance; if (account.Balance < 0) < cell.Interior.Color = 255; cell.Offset[0, 1].Interior.Color = 255; >>);Чтобы запустить программу, нажмите клавишу F5. Появится книга Excel, содержащая данные о счетах.
Добавление документа Word
Добавьте в конец метода ThisAddIn_StartUp следующий код, чтобы создать документ Word, содержащий ссылку на книгу Excel.
var wordApp = new Word.Application(); wordApp.Visible = true; wordApp.Documents.Add(); wordApp.Selection.PasteSpecial(Link: true, DisplayAsIcon: true);Этот код демонстрирует несколько функций в C#: возможность пропускать ref ключевое слово в программировании COM, именованные аргументы и необязательные аргументы. Метод PasteSpecial имеет семь параметров, все из которых являются необязательными ссылочными параметрами. Именованные и необязательные аргументы позволяют определять параметры, к которым требуется обращаться по имени, и передавать аргументы только для этих параметров. В этом примере аргументы указывают на создание ссылки на книгу в буфере обмена (параметр Link ) и отображение ссылки в документе Word в виде значка (параметра DisplayAsIcon ). C# также позволяет опустить ref ключевое слово для этих аргументов.
Выполнение приложения
Нажмите клавишу F5 для запуска приложения. Будет запущено приложение Excel, в котором будет открыта таблица, содержащая сведения о двух счетах из списка bankAccounts . Затем будет открыт документ Word, содержащий ссылку на таблицу Excel.
Очистка завершенного проекта
В Visual Studio выберите "Очистить решение " в меню "Сборка ". В противном случае надстройка выполняется при каждом открытии Excel на компьютере.
Поиск ссылки на PIA
- Снова запустите приложение, но не нажимайте кнопку "Очистить решение".
- Выберите кнопку Пуск. Найдите версию> Microsoft Visual Studio
- В окне командной строки разработчика для Visual Studio введите команду ildasm , а затем нажмите клавишу ВВОД. Появится окно программы IL DASM.
- В меню Файл в окне IL DASM выберите пункт Файл>Открыть. Дважды щелкните версию> Visual Studio Проекты". Откройте папку проекта и найдите в папке bin/Debug файл имя_проекта.dll. Дважды щелкните файл имя_проекта.dll. В новом окне будут показаны атрибуты проекта, а также ссылки на другие модули и сборки. Сборка включает пространства Microsoft.Office.Interop.Excel имен и Microsoft.Office.Interop.Word . По умолчанию в Visual Studio компилятор импортирует в сборку необходимые типы из сборки PIA, на которую указывает ссылка. Дополнительные сведения см. в разделе Практическое руководство. Просмотр содержимого сборок.
- Дважды щелкните значок МАНИФЕСТ. Откроется окно со списком сборок, содержащих элементы, на которые имеются ссылки в проекте. Microsoft.Office.Interop.Excel и Microsoft.Office.Interop.Word нет в списке. Так как вы импортировали типы проектов в сборку, вам не требуется устанавливать ссылки на PIA. Импорт типов в сборку упрощает развертывание. Пин-коды не должны присутствовать на компьютере пользователя. Приложению не требуется развертывание определенной версии PIA. Приложения могут работать с несколькими версиями Office, если необходимые API существуют во всех версиях. Поскольку развертывать сборки PIA больше не требуется, можно создавать приложения для применения в сложных сценариях, чтобы эти приложения работали с несколькими версиями Office, включая и более ранние версии. Код не может использовать интерфейсы API, которые недоступны в версии Office, с которыми вы работаете. Не всегда ясно, был ли определенный API доступен в более ранней версии. Не рекомендуется работать с более ранними версиями Office.
- Закройте окно манифеста и окно сборки.
Восстановление зависимости PIA
- В Обозреватель решений нажмите кнопку "Показать все файлы". Разверните папку Ссылки и выберите Microsoft.Office.Interop.Excel. Нажмите клавишу F4, чтобы открыть окно "Свойства".
- В окне Свойства измените значение свойства Внедрить типы взаимодействия с True на False.
- Повторите шаги 1 и 2 этой процедуры для сборки Microsoft.Office.Interop.Word .
- В C# раскомментируйте два вызова метода Autofit в конце метода DisplayInExcel .
- Нажмите клавишу F5, чтобы проверить, что проект по-прежнему выполняется правильно.
- Повторите шаги 1–3 из предыдущей процедуры, чтобы открыть окно сборки. Обратите внимание, что сборки Microsoft.Office.Interop.Word и Microsoft.Office.Interop.Excel больше не входят в список внедренных сборок.
- Дважды щелкните значок МАНИФЕСТ и просмотрите список сборок, на которые имеются ссылки. В списке будут указаны сборки Microsoft.Office.Interop.Word и Microsoft.Office.Interop.Excel . Так как приложение ссылается на личные данные Excel и Word, а свойство "Типы взаимодействия внедрения" имеет значение False, обе сборки должны существовать на компьютере конечного пользователя.
- В Visual Studio выберите "Очистить решение " в меню "Сборка ", чтобы очистить завершенный проект.
См. также
- Автоматически реализуемые свойства (C#)
- Инициализаторы объектов и коллекций
- набор средств Visual Studio для Office (VSTO)
- Именованные и необязательные аргументы
- Динамический
- Использование типа dynamic
- Лямбда-выражения (C#)
- Пошаговое руководство. Внедрение данных о типах из сборок Microsoft Office в Visual Studio
- Пошаговое руководство. Внедрение данных о типах из управляемых сборок
- Пошаговое руководство. Создание первой надстройки VSTO для Excel
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.