Visual studio использование excel

title description ms.date ms.topic dev_langs helpviewer_keywords author ms.author manager ms.technology ms.workload

Excel Object model overview

Learn that you can interact with the objects provided by the Excel object model to develop solutions that use Microsoft Office Excel.

08/14/2019

conceptual

VB

CSharp

Worksheet object

Range object

object models [Office development in Visual Studio], Excel

object models [Office development in Visual Studio], Office

Workbook class

objects [Office development in Visual Studio], Office object models

Excel object model

Office object models

John-Hart

johnhart

jmartens

office-development

office

Excel object model overview

[!INCLUDE Visual Studio]
To develop solutions that use Microsoft Office Excel, you can interact with the objects provided by the Excel object model. This topic introduces the most important objects:

  • xref:Microsoft.Office.Interop.Excel.Application

  • xref:Microsoft.Office.Interop.Excel.Workbook

  • xref:Microsoft.Office.Interop.Excel.Worksheet

  • xref:Microsoft.Office.Interop.Excel.Range

    [!INCLUDEappliesto_xlalldocapp]

[!includeAdd-ins note]

The object model closely follows the user interface. The xref:Microsoft.Office.Interop.Excel.Application object represents the entire application, and each xref:Microsoft.Office.Interop.Excel.Workbook object contains a collection of Worksheet objects. From there, the major abstraction that represents cells is the xref:Microsoft.Office.Interop.Excel.Range object, which enables you to work with individual cells or groups of cells.

In addition to the Excel object model, Office projects in Visual Studio provide host items and host controls that extend some objects in the Excel object model. Host items and host controls behave like the Excel objects they extend, but they also have additional functionality such as data-binding capabilities and extra events. For more information, see Automate Excel by using extended objects and Host items and host controls overview.

This topic provides a brief overview of the Excel object model. For resources where you can learn more about the entire Excel object model, see Use the Excel object model documentation.

Access objects in an Excel project

When you create a new VSTO Add-in project for Excel, Visual Studio automatically creates a ThisAddIn.vb or ThisAddIn.cs code file. You can access the Application object by using Me.Application or this.Application.

When you create a new document-level project for Excel, you have the option of creating a new Excel Workbook or Excel Template project. Visual Studio automatically creates the following code files in your new Excel project for both workbook and template projects.

Visual Basic C#
ThisWorkbook.vb ThisWorkbook.cs
Sheet1.vb Sheet1.cs
Sheet2.vb Sheet2.cs
Sheet3.vb Sheet3.cs

You can use the Globals class in your project to access ThisWorkbook, Sheet1, Sheet2, or Sheet3 from outside of the respective class. For more information, see Global access to objects in Office projects. The following example calls the xref:Microsoft.Office.Interop.Excel._Worksheet.PrintPreview%2A method of Sheet1 regardless of whether the code is placed in one of the Sheetn classes or the ThisWorkbook class.

C#

:::code language=»csharp» source=»../vsto/codesnippet/CSharp/Trin_VstcoreExcelAutomationCS/Sheet1.cs» id=»Snippet82″:::

VB

:::code language=»vb» source=»../vsto/codesnippet/VisualBasic/Trin_VstcoreExcelAutomation/Sheet1.vb» id=»Snippet82″:::

Because the data in an Excel document is highly structured, the object model is hierarchical and straightforward. Excel provides hundreds of objects with which you might want to interact, but you can get a good start on the object model by focusing on a small subset of the available objects. These objects include the following four:

  • Application

  • Workbook

  • Worksheet

  • Range

    Much of the work done with Excel centers around these four objects and their members.

Application object

The Excel xref:Microsoft.Office.Interop.Excel.Application object represents the Excel application itself. The xref:Microsoft.Office.Interop.Excel.Application object exposes a great deal of information about the running application, the options applied to that instance, and the current user objects open within the instance.

[!NOTE]
You should not set the xref:Microsoft.Office.Interop.Excel.ApplicationClass.EnableEvents%2A property of the xref:Microsoft.Office.Interop.Excel.Application object in Excel to false. Setting this property to false prevents Excel from raising any events, including the events of host controls.

Workbook object

The xref:Microsoft.Office.Interop.Excel.Workbook object represents a single workbook within the Excel application.

The Office development tools in Visual Studio extend the xref:Microsoft.Office.Interop.Excel.Workbook object by providing the xref:Microsoft.Office.Tools.Excel.Workbook type. This type gives you access to all features of a xref:Microsoft.Office.Interop.Excel.Workbook object. For more information, see Workbook host item.

Worksheet object

The xref:Microsoft.Office.Interop.Excel.Worksheet object is a member of the xref:Microsoft.Office.Interop.Excel.Worksheets collection. Many of the properties, methods, and events of the xref:Microsoft.Office.Interop.Excel.Worksheet are identical or similar to members provided by the xref:Microsoft.Office.Interop.Excel.Application or xref:Microsoft.Office.Interop.Excel.Workbook objects.

Excel provides a xref:Microsoft.Office.Interop.Excel.Sheets collection as a property of a xref:Microsoft.Office.Interop.Excel.Workbook object. Each member of the xref:Microsoft.Office.Interop.Excel.Sheets collection is either a xref:Microsoft.Office.Interop.Excel.Worksheet or a xref:Microsoft.Office.Interop.Excel.Chart object.

The Office development tools in Visual Studio extend the xref:Microsoft.Office.Interop.Excel.Worksheet object by providing the xref:Microsoft.Office.Tools.Excel.Worksheet type. This type gives you access to all features of a xref:Microsoft.Office.Interop.Excel.Worksheet object, as well as new features such as the ability to host managed controls and handle new events. For more information, see Worksheet host item.

Range object

The xref:Microsoft.Office.Interop.Excel.Range object is the object you will use most within your Excel applications. Before you can manipulate any region within Excel, you must express it as a xref:Microsoft.Office.Interop.Excel.Range object and work with methods and properties of that range. A xref:Microsoft.Office.Interop.Excel.Range object represents a cell, a row, a column, a selection of cells that contains one or more blocks of cells, which might or might not be contiguous, or even a group of cells on multiple sheets.

Visual Studio extends the xref:Microsoft.Office.Interop.Excel.Range object by providing the xref:Microsoft.Office.Tools.Excel.NamedRange and xref:Microsoft.Office.Tools.Excel.XmlMappedRange types. These types have most of the same features as a xref:Microsoft.Office.Interop.Excel.Range object, as well as new features such as the data binding capability and new events. For more information, see NamedRange control and XmlMappedRange control.

Use the Excel object model documentation

For complete information about the Excel object model, you can refer to the Excel primary interop assembly (PIA) reference and the VBA object model reference.

Primary interop assembly reference

The Excel PIA reference documentation describes the types in the primary interop assembly for Excel. This documentation is available from the following location: Excel 2010 primary interop assembly reference.

For more information about the design of the Excel PIA, such as the differences between classes and interfaces in the PIA and how events in the PIA are implemented, see Overview of classes and interfaces in the Office primary interop assemblies.

VBA object model reference

The VBA object model reference documents the Excel object model as it is exposed to Visual Basic for Applications (VBA) code. For more information, see Excel 2010 object model reference.

All of the objects and members in the VBA object model reference correspond to types and members in the Excel PIA. For example, the Worksheet object in the VBA object model reference corresponds to the xref:Microsoft.Office.Interop.Excel.Worksheet object in the Excel PIA. Although the VBA object model reference provides code examples for most properties, methods, and events, you must translate the VBA code in this reference to Visual Basic or Visual C# if you want to use them in an Excel project that you create by using Visual Studio.

Related topics

Title Description
Excel solutions Explains how you can create document-level customizations and VSTO Add-ins for Microsoft Office Excel.
Work with ranges Provides examples that show how to perform common tasks with ranges.
Work with worksheets Provides examples that show how to perform common tasks with worksheets.
Work with workbooks Provides examples that show how to perform common tasks with workbooks.

Давайте научимся быстро и просто создавать и записывать файлы Excel с помощью visual studio c#. Наше самое простое приложение Windows Forms будет брать из текстбокса текст и заносить его в первую ячейку. Статья написана специально для Сергея =).

Начать необходимо с подключения библиотеки Microsoft.Office.Interop.Excel. Выглядеть это должно так:

Если у вас при открытии обозревателя решений – Ссылки – правая кнопка – Добавить ссылку – Сборки – в списке нет Microsoft.Office.Interop.Excel, то добавьте её через Nuget. Проект – управление пакетами NuGet – в строке поиска Excel:

Теперь создайте новый проект Windows Forms и на форму закиньте текстбокс и кнопку. На кнопки кликните два раза, откроется исходный код. В самом верху допишите следующее:

using Excel = Microsoft.Office.Interop.Excel;

А в методе button1_Click замените так:

private void button1_Click(object sender, EventArgs e)
        {
            string fileName = "D:\temp\test.xls";

            try
            {
                var excel = new Excel.Application();

                var workBooks = excel.Workbooks;
                var workBook = workBooks.Add();
                var workSheet = (Excel.Worksheet)excel.ActiveSheet;

                workSheet.Cells[1, "A"] = textBox1.Text;

                workBook.SaveAs(fileName);
                workBook.Close();
            }
            catch (Exception ex) {
                MessageBox.Show("Ошибка: "+ ex.ToString());
            }

            MessageBox.Show("Файл "+ Path.GetFileName (fileName) + " записан успешно!");

        }

Вот, собственно говоря и все. Текст из текстбокса запишется в ячейку A1. Обратите внимание, что папка temp на диске уже должна существовать.

Дополнение. Прочитать первую ячейку

Это тоже просто:

 string fileName = "D:\temp\test.xls";

Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(fileName, 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "t", false, false, 0, true, 1, 0);
Excel._Worksheet xlWorksheet = (Excel._Worksheet)xlWorkbook.Sheets[1];
Excel.Range xlRange = xlWorksheet.UsedRange;

string temp = (string)(xlRange.Cells[1, 1] as Excel.Range).Value2;// 1 1 - адрес 1-й ячейки
MessageBox.Show(temp);


Автор этого материала — я — Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML — то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, си шарп, excel

Table of Contents

  • Introduction
  • Building the Sample

You can download the source code from this link Source
Code Link

Introduction

The main purpose of this article is to explain how to create simple Excel and Microsoft Word Add-Ins using Visual
Studio Tools for Office
 (VSTO).
VSTO is available as an add-in tool with Microsoft Visual Studio. Using Visual Studio we can develop our own custom controls for Office tools like Excel, Word and and so on.
In
our demo program We have used Visual Studio 2010 and Office 2007.

Building the Sample

This article explains a few basic things to create our own Custom Add-Ins for Excel and Word as follows.

1. Excel Add-Ins

  • Add text to any Excel selected active Excel cell.
  • Add an image to Excel from our Custom Control.
  • Load data from a database and display the search result data in Excel.

2. Word Add-Ins

  • Export Word to PDF.
  • Add Image to Word Document.
  • Add Table to Word document.

Description

Creating Excel Add-Ins

To create our own Custom Control Add-Ins for Excel.

Step 1

Create a new project and select Office 2007 Excel Add-In as in the following Image. Select your Project Folder and enter your Project Name.

Step 2

Now we can see that the Excel ThisAddIn.Cs file has been created in our project folder and we can find two default methods in this class as in the following image. “ThisAddIn_Startup
In this event we can display our own custom Control Add-Ins to Excel. We can see the details in the code part.

Step 3

Add a new UserControl to your project to create your own Custom Excel Control Add-In.

Right-click your project->Click Add New Item->Add User Control and Name the control as you wish. Add all your Controls and design your user control depending on your requirement.

In our example,We are performing 3 types of actions in User Controls.

  1. Add Text: In this button click event I will insert the text from the Text box to the Active Selected Excel Cell. Using “Globals.ThisAddIn.Application.ActiveCell
    we can get the current active Excel cell. We store the result in an Excel range and now using the range, value and color we can set our own text and colors to the active Excel Cell.

private void btnAddText_Click(object sender, EventArgs e)  

{  

    Excel.Range objRange = Globals.ThisAddIn.Application.ActiveCell;  

    objRange.Interior.Color = Color.Pink; //Active Cell back Color  

    objRange.Borders.Color = Color.Red;// Active Cell border Color  

    objRange.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;  

    objRange.Value = txtActiveCellText.Text; //Active Cell Text Add  

    objRange.Columns.AutoFit();   

}

2.  Add Image: using
the Open File Dialog we can select our own image that needs to be added to the Excel file. Using the Excel.Shape we can add our selected image to the Excel file.

private void btnAddImage_Click(object sender, EventArgs e)  

        {  

            OpenFileDialog dlg = new OpenFileDialog();  

            dlg.FileName = "*";  

            dlg.DefaultExt = "bmp";  

            dlg.ValidateNames = true;  

            dlg.Filter = "Bitmap Image (.bmp)|*.bmp|Gif Image (.gif)|*.gif|JPEG Image (.jpeg)|*.jpeg|Png Image (.png)|*.png";  

            if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)  

            {  

                Bitmap dImg = new Bitmap(dlg.FileName);  

                  Excel.Shape IamgeAdd = Globals.ThisAddIn.Application.ActiveSheet.Shapes.AddPicture(dlg.FileName,  

      Microsoft.Office.Core.MsoTriState.msoFalse,            Microsoft.Office.Core.MsoTriState.msoCTrue,  

          20, 30, dImg.Width, dImg.Height);  

            }  

            System.Windows.Forms.Clipboard.Clear();  

        }

Search and bind Db Data to Excel: Now
we can create our own Custom Search control to be used in Excel to search our data from the database and bind the result to the Excel file.

Creating the table

-- Create Table ItemMaster in your SQL Server - This table will be used for search and bind result to excel.  

CREATE
TABLE
[dbo].[ItemMasters](  

[Item_Code] [varchar](20)
NOT NULL,  

[Item_Name] [varchar](100)
NOT NULL)  

-- insert sample data to Item Master table  

INSERT
INTO
[ItemMasters] ([Item_Code],[Item_Name])  

VALUES
('Item001','Coke')  

INSERT
INTO
[ItemMasters] ([Item_Code],[Item_Name])  

VALUES
('Item002','Coffee')  

INSERT
INTO
[ItemMasters] ([Item_Code],[Item_Name])  

VALUES
('Item003','Chiken Burger')  

INSERT
INTO
[ItemMasters] ([Item_Code],[Item_Name])  

VALUES
('Item004','Potato Fry')

In the button search click event we search for the data from the database and bind the result to an Excel cell using “Globals.ThisAddIn.Application.ActiveSheet.Cells”.
This will add the result to the active Excel sheet.

private
void
btnSearch_Click(
object
sender, EventArgs e)  

{  

    try  

    {  

        System.Data.DataTable dt =
new
System.Data.DataTable();  

        String ConnectionString =
"Data Source=YOURDATASOURCE;Initial Catalog=YOURDATABASENAME;User id = UID;password=password";  

        SqlConnection con =
new
SqlConnection(ConnectionString);  

        String Query =
" Select Item_Code,Item_Name FROM ItemMasters Where Item_Name LIKE '"
+ txtItemName.Text.Trim() + "%'";  

        SqlCommand cmd =
new
SqlCommand(Query, con);  

        cmd.CommandType = System.Data.CommandType.Text;  

        System.Data.SqlClient.SqlDataAdapter sda =
new
System.Data.SqlClient.SqlDataAdapter(cmd);  

        sda.Fill(dt);  

        if
(dt.Rows.Count <= 0)  

        {  

            return;  

        }  

        Globals.ThisAddIn.Application.ActiveSheet.Cells.ClearContents();    

        Globals.ThisAddIn.Application.ActiveSheet.Cells[1, 1].Value2 =
"Item Code";     

        Globals.ThisAddIn.Application.ActiveSheet.Cells[1, 2].Value2 =
"Item Name";     

        for
(int
i = 0; i <= dt.Rows.Count - 1; i++)  

        {     

            Globals.ThisAddIn.Application.ActiveSheet.Cells[i + 2, 1].Value2 = dt.Rows[i][0].ToString();        

            Globals.ThisAddIn.Application.ActiveSheet.Cells[i + 2, 2].Value2 = dt.Rows[i][1].ToString();  

        }  

    }  

    catch
(Exception ex)  

    {  

    }  

}

Step 4

Now we have created our own User Control to be added to our Excel Add-Ins. To add this user control to our Excel Add-In as we have already seen that the Excel Addin class “ThisAddIn.Cs” has start and stop events. Using
the Office “CustomTaskpane” we can add our user control to Excel as an Add-In as in the following.

private
Microsoft.Office.Tools.CustomTaskPane customPane;  

private
void
ThisAddIn_Startup(
object
sender, System.EventArgs e)  

{  

    ShowShanuControl();  

}  

public
void
ShowShanuControl()  

{  

    var txtObject =
new
ShanuExcelADDIn();  

    customPane =
this.CustomTaskPanes.Add(txtObject,
"Enter Text");  

    customPane.Width = txtObject.Width;  

    customPane.Visible =
true;  

}

Step 5

Run your program and now we can see our user control has been added in the Excel File as an Add-In.
Next we will see how to create Add-Ins for Word Documents using a Ribbon Control.

Creating Word Add-Ins: 
In my example I have used Visual Studio 2010 and Office 2007.
The following describes how to create our own Custom Control Add-Ins for Word.

Step 1

Create a new project and select Office 2007 Word AddIn as in the following Image. Select your Project Folder and enter your Project Name.

Step 2

Add a new Ribbon Control to your project to create your own Word Control Add-In.

Right-click your project then click Add New Item -> Add Ribbon Control and name the control as you wish. 

Add all your controls and design your user control depending on your requirements. By default in our Ribbon Control we can see a “RibbonGroup”. We can add all our controls to the Ribbon Group. Here
in my example I have changed the Group Label Text to “SHANU Add-In”. I have added three Ribbon Button Controls to the group. We can add an image to the Ribbon Button Controls and set the properties of the Button Control Size as “
RibbobControlSizeLarge”. 

Here I have added three Button Controls for export the Word as a PDF, add an image to Word and add a table to the Word file.

Step 3

Export to PDF File Button Click.

Using the “Globals.ThisAddIn.Application.ActiveDocument.ExportAsFixedFormat” we can save the Word document to the PDF file. I have used the Save file dialog to save the PDF file into our selected path.

private
void
btnPDF_Click(
object
sender, RibbonControlEventArgs e)  

{  

    SaveFileDialog dlg =
new
SaveFileDialog();  

    dlg.FileName =
"*";  

    dlg.DefaultExt =
"pdf";  

    dlg.ValidateNames =
true;  

    if
(dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)  

    {  

        Globals.ThisAddIn.Application.ActiveDocument.ExportAsFixedFormat(dlg.FileName, word.WdExportFormat.wdExportFormatPDF, OpenAfterExport:
true);  

    }              

}

Step 4

Here we will add an image to Word. Using the Open File Dialog we can select our own image to be added to the Word file. Using the “Globals.ThisAddIn.Application.ActiveDocument.Shapes.AddPicture” method we can add our
selected image to the Word file.

private
void
btnImage_Click(
object
sender, RibbonControlEventArgs e)  

{  

    OpenFileDialog dlg =
new
OpenFileDialog();  

    dlg.FileName =
"*";  

    dlg.DefaultExt =
"bmp";  

    dlg.ValidateNames =
true;  

    dlg.Filter =
"Bitmap Image (.bmp)|*.bmp|Gif Image (.gif)|*.gif|JPEG Image (.jpeg)|*.jpeg|Png Image (.png)|*.png";  

    if
(dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)  

    {  

        Globals.ThisAddIn.Application.ActiveDocument.Shapes.AddPicture(dlg.FileName);  

    }  

}

Step 5

Here we will add a table to Word. Using the “Globals.ThisAddIn.Application.ActiveDocument.Tables” method we can add a table to the Word file. In my example I have created a table with 4 columns and 3 rows.

private
void
button1_Click(
object
sender, RibbonControlEventArgs e)  

{  

    Globals.ThisAddIn.Application.ActiveDocument.Tables.Add(Globals.ThisAddIn.Application.ActiveDocument.Range(0, 0), 3, 4);  

.ThisAddIn.Application.ActiveDocument.Tables[1].Range.Shading.BackgroundPatternColor = Microsoft.Office.Interop.Word.WdColor.wdColorSeaGreen;  

    Globals.ThisAddIn.Application.ActiveDocument.Tables[1].Range.Font.Size = 12;  

    Globals.ThisAddIn.Application.ActiveDocument.Tables[1].Rows.Borders.Enable = 1;  

}

Step 6

Run your program and now you will see your own Ribbon Control has been added to the Word file as an Add-In.

  

You can download the source code from this link Source
Code Link

Разработать расширение VSTO для Excel

Excel должен быть эффективным инструментом, который мы обычно используем в нашей повседневной работе. Если вы хотите расширить больше бизнес-функций Excel, вы можете разработать расширения VSTO для Excel в среде разработки VS. Интерфейс Excel, после добавления вкладок и элементов управления в функциональную область Office, выполняет некоторые необходимые нам бизнес-функции:

Новая надстройка Excel VSTO

  1. Создайте новое приложение расширения Excel в VS. Если вы не найдете эту опцию, перейдите к установщику VS в красном поле и выберите вариант разработки Office (версия VS, которую я использую — 2015 и 2017)

  2. ThisAddIn.cs является основной точкой входа в программу расширения VSTO, которая предоставляет нам множество событий обратного вызова для использования

  3. Щелкните правой кнопкой мыши в решении нового проекта, чтобы создать функциональную область для проекта Excel, эта функциональная область является пользовательским интерфейсом внешней программы Excel VSTO.

  • Очень просто, проект завершен

Основные пространства имен и абстрактные типы

Узнайте о двух часто используемых библиотеках

При разработке VSTO часто используются две библиотеки:

using Microsoft.Office.Interop.Excel;
using Microsoft.Office.Tools.Excel;

из их:

  • Пространство имен Interop.Excel
    • Интерфейс COM, предоставляемый Microsoft для доступа к Excel, наиболее широко используется: он может использоваться для непосредственного чтения и записи содержимого в версии Excel для Windows, например:
      • Получить все листы в Excel
      • Получить Изменить ячейки в Excel
      • Добавить страницу листа
      • и многое другое
  • Tools.Excel namespace
    • Это библиотека классов для расширения поддержки объектной модели Office Excel, с помощью которой вы можете комбинировать другие компоненты .NET с Excel для достижения некоторых функций, таких как:
      • Используйте интерфейс ListObject, чтобы связать экземпляр DataTable с таблицей листов Excel.
      • Используйте интерфейс Chart для добавления диаграммы в лист Excel

Понимать абстрактные типы в разработке Excel

  • 1、Application

    В программе VSTO интерфейс приложения представляет все приложение Excel

  • 2、WorkSheet

    Объект WorkSheet является членом набора объектов WorkSheets и является абстракцией страницы листа в Excel.

  • 3、Range

    Объект Range — это абстракция каждой ячейки в Excel или выделенной области, содержащей один или несколько блоков ячеек (эта область может быть непрерывной или прерывистой) )

Вышеупомянутые три элемента — три наиболее часто используемых абстрактных интерфейса для Excel в VSTO

Основная операция

В проекте Excel, в файле ThisAddIn и других файлах проекта,Способ чтения и записи элементов Excel отличается

  • В файле ThisAddIn.cs получить доступ к элементам в Excel и получить прямой доступ к нему с помощью приложения
using Excel = Microsoft.Office.Interop.Excel;

Excel.Worksheet activeWorksheet = ((Excel.Worksheet)Application.ActiveSheet);
Excel.Range firstRow = activeWorksheet.get_Range("A1");
  • Однако в файлах не-ThisAddIn .cs, таких как событие кнопки новой ленты, если вы хотите получить доступ к элементу Excel, вы должны добавить Globals.ThisAddIn впереди, чтобы получить к нему обычный доступ.
  • При нормальных обстоятельствах бизнес-операции вообще не будут выполняться в основной программе, поэтому все основные примеры операций в будущем будут приведены в соответствии с методом доступа неосновной программы:
using Microsoft.Office.Tools.Ribbon;
using Microsoft.Office.Interop.Excel;
using ExcelTools = Microsoft.Office.Tools;

// Операции на уровне листа:
Worksheet wst = ((Worksheet)Globals.ThisAddIn.Application.ActiveSheet);                     // Получить текущую выбранную страницу листа;
Worksheet wst2 = ((Worksheet)Globals.ThisAddIn.Application.Worksheets[«Оценка ситуации»]);         // Получить страницу листа на основе имени;

// Новый лист
Worksheet new_wst;
new_wst = (Worksheet)Globals.ThisAddIn.Application.Worksheets.Add();
new_wst.Name = «Новая листовая страница»;

int rowsCount = wst.UsedRange.Rows.Count;                                                   // Получить использованные строки
int colsCount = wst.UsedRange.Columns.Count;                                                // Получить использованные столбцы

var content = wst2.Range["A1"].Value;                                                       // Получить содержимое ячейки в таблице
((Range)wst.Range["A8"]).Value = "111";                                                     // Записать данные ячейки

((Range)wst2.Rows[2, Type.Missing]).Delete(XlDeleteShiftDirection.xlShiftToLeft);           // удаляем строку
((Range)wst2.Cells[1, 2]).EntireColumn.Delete(0);                                           // удаляем столбец

// Вынимаем все столбцы этой таблицы
// Если вы не используете UsedRange, вы получите все столбцы, которые Excel содержит пустыми
List<string> all_column = new List<string>();
foreach (Range all_col in wst2.UsedRange.Columns)
{
    all_column.Add(all_col.Value2[1, 1]);
}

// Получить все имена таблиц текущей таблицы Excel;
List<string> m_AllSheets = new List<string>();
foreach (var sheetlist in Globals.ThisAddIn.Application.Worksheets)
{
    m_AllSheets.Add(((Worksheet)sheetlist).Name);
}

Расширенные элементы управления Excel

Microsoft предоставляет несколько полезных расширенных элементов управления для Excel, которые могут помочь Excel выполнить более расширенные функции, такие как:

  • Добавить таблицу на лист и связать источник данных
  • Добавить диаграмму на лист и связать источник данных
  • Подождите, как показано ниже:

1. Используйте ObjectList, чтобы расширить элемент управления на таблицу Excel и связать источник данных

Все операции, описанные выше, являются операциями над каждым отдельным элементом в Excel, но если есть одинисточник данныхНеобходимо связать с рабочим листом в Excel, это роль ListObject. Элемент управления ListObject поддерживает простое и сложное связывание данных, самое простое, например: например, связывание источника данных DataTable в памяти

Вариант использования 1: привязка DataTable к ObjectList

Добавление ListObject в WorkSheet of Excel с использованием программирования VSTO аналогично добавлению таблицы в Excel. Операция в Excel заключается в следующем:

Используя разработку кода в VSTO, эффект тот же:

using Microsoft.Office.Tools.Ribbon;
using Microsoft.Office.Interop.Excel;
using ExcelTools = Microsoft.Office.Tools;


string connectionString = «Вот строка для подключения к базе данных»;

// Добавить ListObject to WorkSheet;
ExcelTools.Excel.Worksheet worksheet = Globals.Factory.GetVstoObject(wst);
ExcelTools.Excel.ListObject list1;
Range cell = worksheet.Range["$A$1:$Z$9999"];
list1 = worksheet.Controls.AddListObject(cell, "list1");
list1.AutoSetDataBoundColumnHeaders = true;

// Запрос через OleDB;
using (OleDbConnection con = new OleDbConnection(connectionString))
{
    var dataTable = new System.Data.DataTable();
    string query = SQL_Generator.GenerateSQLByTemplate(column);
    con.Open();
    OleDbDataAdapter adapter = new OleDbDataAdapter(query, con);

    adapter.Fill(dataTable);
    ds.Tables.Add(dataTable);
    con.Close();

    list1.SetDataBinding(dataTable, null, sheetnames);
}

Пример 2. Использование расширенного элемента управления Chart для добавления диаграммы в Excel

using Microsoft.Office.Tools.Ribbon;
using Microsoft.Office.Interop.Excel;
using ExcelTools = Microsoft.Office.Tools;


ExcelTools.Excel.Worksheet worksheet = Globals.Factory.GetVstoObject(
    Globals.ThisAddIn.Application.ActiveWorkbook.ActiveSheet);


Range cells = worksheet.Range["A5", "D8"];
ExcelTools.Excel.Chart chart = worksheet.Controls.AddChart(cells, "employees");
chart.ChartType = XlChartType.xl3DPie;
chart.SetSourceData(cells);

Содержание

  1. Как получить доступ к объектам взаимодействия Office
  2. Создание нового проекта консольного приложения
  3. Добавление ссылок
  4. Добавление необходимых директив using
  5. Создание списка банковских счетов
  6. Объявление метода, экспортирующего сведения о счетах в Excel
  7. Запуск проекта
  8. Добавление документа Word
  9. Задание свойства «Внедрить типы взаимодействия»
  10. Дополнительное форматирование таблицы
  11. Пошаговое руководство. Программирование office на C #
  12. Предварительные требования
  13. Настройка приложения надстройки Excel
  14. Добавление необходимых инструкций Imports или директив using
  15. Создание списка банковских счетов
  16. Экспорт данных в Excel
  17. Вызов DisplayInExcel
  18. Добавление документа Word
  19. Выполнение приложения
  20. Очистка завершенного проекта

Как получить доступ к объектам взаимодействия 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 использует платформа .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. Если сборки не отображаются, их может потребоваться установить. См. практическое руководство по установке основных сборок взаимодействия Microsoft Office.
  3. Щелкните ОК.

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

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

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

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

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

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

  1. Чтобы настроить лист Excel, добавьте в класс Program следующий метод. У метода Add есть необязательный параметр для указания конкретного шаблона. Необязательные параметры позволяют опустить аргумент для этого параметра, если вы хотите использовать значение параметра по умолчанию. Так как аргумент не был задан, Add используется шаблон по умолчанию и создается новая книга. В эквивалентном операторе в более ранних версиях C# необходимо было использовать аргумент-местозаполнитель ExcelApp.Workbooks.Add(Type.Missing) .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

Пошаговое руководство. Программирование office на C #

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

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

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

VSTO использует платформа .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.

Предварительные требования

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

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

Настройка приложения надстройки Excel

  1. Запустите Visual Studio.
  2. В меню Файл последовательно выберите команды Создатьи Проект.
  3. В области Установленные шаблоны разверните узел C#, узел Office, а затем выберите год версии продукта Office.
  4. В области Шаблоны выберите Версия> Excel .0.0.0 (расшифровку номеров версий продуктов Office см. в разделе Версии Майкрософт), а затем, удерживая нажатой клавишу CTRL, выберите Microsoft.Office.Interop.Word, version .0.0.0 . Если вы не видите эти сборки, возможно, потребуется установить их (см. раздел Практическое руководство. Установка основных сборок взаимодействия Office).
  5. Щелкните ОК.

Добавление необходимых инструкций Imports или директив using

В Обозреватель решений щелкните правой кнопкой мыши файл ThisAddIn.cs и выберите Пункт Просмотреть код. Добавьте следующие using директивы (C#) в начало файла кода, если они еще не присутствуют.

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

В Обозреватель решений щелкните правой кнопкой мыши имя проекта, выберите Добавить, а затем — Класс. Присвойте классу имя Account.cs. Выберите Добавить. Замените определение класса Account следующим кодом. В определениях классов используются автоматически реализуемые свойства.

Чтобы создать bankAccounts список, содержащий две учетные записи, добавьте следующий код ThisAddIn_Startup в метод ThisAddIn.cs. В объявлениях списков используются инициализаторы коллекций.

Экспорт данных в Excel

В том же самом файле добавьте в класс ThisAddIn следующий метод. Этот метод служит для настройки книги Excel и экспорта данных в нее.

  • У метода Add есть необязательный параметр для указания конкретного шаблона. Необязательные параметры позволяют опустить аргумент для этого параметра, если вы хотите использовать значение параметра по умолчанию. Так как в предыдущем примере нет аргументов, Add использует шаблон по умолчанию и создает новую книгу. В эквивалентном операторе в более ранних версиях C# необходимо было использовать аргумент-местозаполнитель excelApp.Workbooks.Add(Type.Missing) . Дополнительные сведения см. в разделе Именованные и необязательные аргументы.
  • Свойства Range и Offset объекта Range используют возможность индексированных свойств. Она позволяет использовать свойства типов COM с помощью стандартного синтаксиса C#. Кроме того, индексированные свойства позволяют использовать свойство Value объекта Range , устраняя необходимость в использовании свойства Value2 . Свойство Value является индексированным, но индекс — необязательным. Совместная работа необязательных аргументов и индексированных свойств показана в следующем примере.

Вы не можете создавать собственные индексированные свойства. Эта возможность поддерживает только использование имеющихся индексированных свойств.

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

Эти дополнения демонстрируют еще одну возможность C#: значения Object , возвращаемые главными приложениями COM, например приложениями Office, и обрабатываются так, как если бы они имели тип dynamic. COM-объекты обрабатываются автоматически dynamic , если типы взаимодействия Embed имеют значение True по умолчанию, или, эквивалентно, при ссылке на сборку с параметром компилятора EmbedInteropTypes . Дополнительные сведения о внедрении типов взаимодействия см. в процедурах «Поиск ссылки на PIA» и «Восстановление зависимости PIA» далее в этой статье. Дополнительные сведения о dynamic см. в разделе dynamic или Использование типа dynamic.

Вызов DisplayInExcel

Добавьте следующий код в конец метода ThisAddIn_StartUp . Вызов метода DisplayInExcel содержит два аргумента. Первый аргумент — это имя списка обработанных учетных записей. Второй аргумент — многостроочное лямбда-выражение, определяющее способ обработки данных. Значения ID и balance для каждого из счетов отображаются в соседних ячейках, а если баланс имеет отрицательное значение, строка отображается красным. Дополнительные сведения см. в разделе Лямбда-выражения.

Чтобы запустить программу, нажмите клавишу F5. Появится книга Excel, содержащая данные о счетах.

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

Добавьте в конец метода ThisAddIn_StartUp следующий код, чтобы создать документ Word, содержащий ссылку на книгу Excel.

В этом коде демонстрируются некоторые возможности C#: возможность пропуска ключевого ref слова в программировании COM, именованные аргументы и необязательные аргументы. Метод PasteSpecial имеет семь параметров, все из которых являются необязательными ссылочными параметрами. Именованные и необязательные аргументы позволяют определять параметры, к которым требуется обращаться по имени, и передавать аргументы только для этих параметров. В этом примере аргументы указывают на создание ссылки на книгу в буфере обмена (параметр Link ) и отображение ссылки в документе Word в виде значка (параметр DisplayAsIcon ). C# также позволяет опустить ключевое ref слово для этих аргументов.

Выполнение приложения

Нажмите клавишу F5 для запуска приложения. Будет запущено приложение Excel, в котором будет открыта таблица, содержащая сведения о двух счетах из списка bankAccounts . Затем будет открыт документ Word, содержащий ссылку на таблицу Excel.

Очистка завершенного проекта

В Visual Studio выберите Очистить решение в меню Сборка . В противном случае надстройка запускается при каждом открытии Excel на компьютере.

Источник

Понравилась статья? Поделить с друзьями:
  • Visual studio visual basic excel
  • Visual studio read excel
  • Visual studio for office excel
  • Visual studio for excel 2007
  • Visual studio excel vba