Kniga-Online.club
» » » » Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Читать бесплатно Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен. Жанр: Программирование год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:
чтобы принимать и возвращать специфический тип данных по имени Variant. Во многом похоже на ключевое слово dynamic языка С#, типу данных Variant может быть присвоен на лету любой тип данных СОМ (строка, ссылка на интерфейс, числовое значение и т.д.). До появления ключевого слова dynamic передача и прием элементов данных типа Variant требовали немалых ухищрений, обычно связанных с многочисленными операциями приведения.

Когда свойство EmbedlnteropTypes установлено в true, все COM-типы Variant автоматически отображаются на динамические данные. В итоге не только сокращается потребность в паразитных операциях приведения при работе с типами данных Variant, но также еще больше скрываются некоторые сложности, присущие СОМ, вроде работы с индексаторами СОМ.

Дополнительной сложностью при работе с взаимодействием с СОМ и .NET 5 является отсутствие поддержки на этапе компиляции и во время выполнения. Версия MSBuild в .NET 5 не способна распознавать библиотеки взаимодействия, поэтому проекты .NET Core, в которых задействовано взаимодействие с СОМ, не могут компилироваться с применением интерфейса командной строки .NET Core. Они должны компилироваться с использованием Visual Studio, и скомпилированный исполняющий файл можно будет запускать вполне ожидаемым способом.

Взаимодействие с СОМ с использованием динамических данных C#

Чтобы продемонстрировать, каким образом необязательные аргументы, именованные аргументы и ключевое слово dynamic совместно способствуют упрощению взаимодействия с СОМ, будет построено приложение, в котором применяется объектная модель Microsoft Office. Добавьте новый файл класса по имени Car.cs, содержащий такой код:

namespace ExportDataToOfficeApp

{

  public class Car

  {

    public string Make { get; set; }

    public string Color { get; set; }

    public string PetName { get; set; }

  }

}

Поместите в начало файла Program.cs следующие операторы using:

using System;

using System.Collections.Generic;

using System.Reflection;

using Excel = Microsoft.Office.Interop.Excel;

using ExportDataToOfficeApp;

Обратите внимание на псевдоним Excel для пространства имен Microsoft.Office.Interop.Excel. Хотя при взаимодействии с библиотеками СОМ псевдоним определять не обязательно, это обеспечивает наличие более короткого квалификатора для всех импортированных объектов СОМ. Он не только снижает объем набираемого кода, но также разрешает проблемы, когда объекты СОМ имеют имена, конфликтующие с именами типов .NET Core.

Далее создайте список записей Car в операторах верхнего уровня внутри файла Program.cs:

// Создать псевдоним для объектной модели Excel.

using Excel = Microsoft.Office.Interop.Excel;

Next, create a list of Car records in the top-level statements in Program.cs:

List<Car> carsInStock = new List<Car>

{

  new Car {Color="Green", Make="VW", PetName="Mary"},

  new Car {Color="Red", Make="Saab", PetName="Mel"},

  new Car {Color="Black", Make="Ford", PetName="Hank"},

  new Car {Color="Yellow", Make="BMW", PetName="Davie"}

}

Поскольку вы импортировали библиотеку СОМ с использованием Visual Studio, сборка PIA автоматически сконфигурирована так, что используемые метаданные будут встраиваться в приложение .NET Core. Таким образом, все типы данных Variant из СОМ реализуются как типы данных dynamic. Взгляните на показанную ниже реализацию метода ExportToExcel():

void ExportToExcel(List<Car> carsInStock)

{

  // Загрузить Excel и затем создать новую пустую рабочую книгу.

  Excel.Application excelApp = new Excel.Application();

  excelApp.Workbooks.Add();

  // В этом примере используется единственный рабочий лист.

  Excel._Worksheet workSheet = (Excel._Worksheet)excelApp.ActiveSheet;

  // Установить заголовки столбцов в ячейках.

  workSheet.Cells[1, "A"] = "Make";

  workSheet.Cells[1, "B"] = "Color";

  workSheet.Cells[1, "C"] = "Pet Name";

  // Сопоставить все данные из List<Car> с ячейками электронной таблицы.

  int row = 1;

  foreach (Car c in carsInStock)

  {

    row++;

    workSheet.Cells[row, "A"] = c.Make;

    workSheet.Cells[row, "B"] = c.Color;

    workSheet.Cells[row, "C"] = c.PetName;

  }

  // Придать симпатичный вид табличным данным.

  workSheet.Range["A1"].AutoFormat

      (Excel.XlRangeAutoFormat.xlRangeAutoFormatClassic2);

  // Сохранить файл, завершить работу Excel и отобразить сообщение пользователю.

  workSheet.SaveAs($@"{Environment.CurrentDirectory}Inventory.xlsx");

   excelApp.Quit();

  Console.WriteLine("The Inventory.xslx file has been saved to your app folder");

                  // Файл Inventory.xslx сохранен в папке приложения.

}

Метод ExportToExcel() начинается с загрузки приложения Excel в память; однако на рабочем столе оно не отобразится. В данном приложении нас интересует только работа с внутренней объектной моделью Excel. Тем не менее, если необходимо отобразить пользовательский интерфейс Excel, тогда метод понадобится дополнить следующим кодом:

static void ExportToExcel(List<Car> carsInStock)

{

  // Загрузить Excel и затем создать новую пустую рабочую книгу.

  Excel.Application excelApp = new Excel.Application();

  // Сделать пользовательский интерфейс Excel видимым на рабочем столе.

  excelApp.Visible = true;

...

}

После создания пустого рабочего листа добавляются три столбца, именованные в соответствии со свойствами класса Car. Затем ячейки наполняются данными List<Car>, и файл сохраняется с жестко закодированным именем Inventory.xlsx.

Если вы запустите приложение, то сможете затем открыть файл Inventory.xlsx, который будет сохранен в подкаталоге binDebugnet5.0 вашего проекта.

Хотя не похоже, что в предыдущем коде использовались какие-либо динамические данные, имейте в виду, что среда DLR оказала значительную помощь. Без среды DLR код пришлось записывать примерно так:

static void ExportToExcelManual(List<Car> carsInStock)

{

  Excel.Application excelApp = new Excel.Application();

  // Потребуется пометить пропущенные параметры!

  excelApp.Workbooks.Add(Type.Missing);

  // Потребуется привести объект Object к _Worksheet!

  Excel._Worksheet workSheet =

    (Excel._Worksheet)excelApp.ActiveSheet;

  // Потребуется привести каждый объект Object к Range

  // и затем обратиться к низкоуровневому свойству Value2!

  ((Excel.Range)excelApp.Cells[1, "A"]).Value2 = "Make";

  ((Excel.Range)excelApp.Cells[1, "B"]).Value2 = "Color";

  ((Excel.Range)excelApp.Cells[1, "C"]).Value2 = "Pet Name";

  int row = 1;

  foreach (Car c in carsInStock)

  {

    row++;

    // Потребуется привести каждый объект Object к Range

    // и затем обратиться к низкоуровневому свойству Value2!

    ((Excel.Range)workSheet.Cells[row, "A"]).Value2 = c.Make;

    ((Excel.Range)workSheet.Cells[row, "B"]).Value2 = c.Color;

    ((Excel.Range)workSheet.Cells[row, "C"]).Value2 = c.PetName;

  }

  // Потребуется вызвать метод get _ Range()

Перейти на страницу:

Эндрю Троелсен читать все книги автора по порядку

Эндрю Троелсен - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


Язык программирования C#9 и платформа .NET5 отзывы

Отзывы читателей о книге Язык программирования C#9 и платформа .NET5, автор: Эндрю Троелсен. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*