C вставка в excel
В современном мире разработки приложений нередко встает необходимость работы с Excel документами. Чаще всего это разного рода отчеты, но иногда xls/x файлы используются в качестве хранилища данных. Например, если пользователь должен иметь возможность загрузить данные в приложение или выгрузить, в человеко-читаемом виде, Excel де-факто является стандартом. Относительно дружелюбный интерфейс, прозрачная структура, в купе с его распространенностью. трудно навскидку назвать решение лучше.
Историческая справка
Времена, когда доминировал проприетарный формат .xls(Excel Binary File Format) давно прошли и сейчас мы имеем только .xlsx(Excel Workbook), в рамках Office Open XML. Последний представляет собой обычный .zip архив с XML файлами. Не будем углубляться в его структуру, я искренне надеюсь что вам это никогда не понадобится.
На github, и не только, можно найти ряд библиотек, бесплатных и не только. Пожалуй самой популярной является EPPlus. До определенной степени, она довольно хорошо отражает концепцию Excel, именно по этому я всегда использую EPPlus. Версия 4 полностью бесплатна, начиная с 5‐й версии вам потребуется приобрести лицензию для коммерческого использования.
Задача
Итак, предположим, продукт-мэнеджеру ударила в голову идея того, что возможность выгружать некий отчет в формате Excel увеличит кол-во пользователей на 100500%. Проджет-менеджер решает выкатить эту киллер-фичу как хотфикс прямо сегодня — ведь работы всего на пару часов.
Сам по себе, отчет содержит краткое описание компании и историю изменения некоторых экономических показателей. Для простоты все свойства компании — строки. Экономические показатели — большие целые числа и числа с плавающей точкой, а также даты. Предположим, что где-то в недрах микросервисного backend-да есть сервис-генератор подобных отчетов, например по id компании. Однако, поскольку id нет смысла выводить пользователю, идентификатор отсутствует в самой модели отчета.
Аналитик, в свою очередь, выдает задачу с феноменально точным описанием - "Сгенерировать excel отчет на базе данных MarketReport". Что ж, для нашего примера, создадим заглушку — генератор фейковых данных:
Первый запуск
Подключим EPPlus версии 4.5.3.3 и создадим базовую обвязку для будущего генератора.
Сердцем генератора будет метод Generate. ExcelPackage это модель документа, через которую мы и будем осуществлять все взаимодействия с ним. Также имеется конструктор для передачи пути к файлу или потока.
В методе main создается генератор отчетов, а также генератор Excel файлов. Далее полученный файл просто записывается на диск.
При попытке запустить приложение, получаем exception: InvalidOperationException: The workbook must contain at least one worksheet
Все правильно, Excel документ не может существовать без страниц, должна быть хотя бы одна. Добавляем ее, все интуитивно понятно:
Запускаем снова и. вот оно! Теперь наше приложение генерирует документ и, хотя там еще ничего нет, он уже весит 2,5KB - значит мы работаем с Excel правильно и все идет как надо.
Вывод данных
Давайте выведем основную информацию по компании в шапку. Для доступа к конкретной ячейки объект Cells на странице пакета снабжен удобным индексатором. При этом, до конкретной ячейки можно достучаться как через номер строки и столбца, так и по привычному всем буквенно-числовому коду:
Полный код вывода шапки.
Для вывода исторических данных понадобится как минимум шапка таблицы и цикл по массиву History:
Предлагаю обратить внимание на метод LoadFromArrays, который заполняет диапазон ячеек рваным(зубчатым) массивом. Здесь мы можем видеть, что типизация теряется и передавая массив object мы ожидаем что EPPlus в конечном итоге использует ToString, чтобы записать переданное в ячейки.
Стилизация
Если вы прямо сейчас откроете документ, то вы возможно увидите не то, что хотелось бы отдать в продакшн в пятницу вечером.
Как это выглядит
Во-первых, шапка никак не выделяется, во-вторых таблица не имеет границ. выравнивание пляшет, даты отображаются магическими числами, а капитализация "уходит в какую-то математику" - как это прокомментировал аналитик.
Да, на все эти красивости у нас уйдет больше года кода, чем на сам вывод данных, и, в конечном тоге, получившаяся каша из логики вывода данных и разметки заставит некоторых усомниться в их компетентности. но, мы же backend разработчики, так давайте сверстаем Excel Sheet!
Размер ячеек
Из коробки у нас есть возможность сделать автофит а так же вручную выставить ширину в соответствии с нашей ситуацией. А ситуация у нас не самая хорошая — по задумке аналитика в шапке у ячеек должен быть автофит, а у ячеек таблицы — тоже автофит. Так в чем же подвох?
Если вы когда-нибудь до этого открывали Excel, то возможно знаете, что ширина ячеек не может отличаться в рамках столбца и автофит будет по самому широкому контенту ячейки. Однако, простые вещи бывает нетак то просто объяснить. Но если вы справитесь, то вот как это будет выглядеть в коде:
Формат данных
Как и большая часть стиля ячейки, он задается через одноименное свойство Style. Обратите внимание на вычисление 3-го аргумента индексатора. Это звоночек некачественного кода, но к этому мы вернемся в позже.
Выравнивание
Его можно задать как на ячейке, так и на диапазоне. На самом деле, для EPPlus, это одна и та же сущность — некий ExcelRange, описывающий диапазон ячеек, в том числе и со всего 1 ячейкой.
Стиль текста
Также легко задается, используя Style.Font, кстати, здесь, на 2-й строчке, мы впервые указываем диапазон так, как привыкли его видеть пользователи Excel:
Границы
Задаем стиль линии, а также ее толщину. К этому моменту от кол-ва магических чисел-параметров индексатора уже рябит в глазах, но мы уже на финишной прямой. не так ли?
График
"Ну что за отчет без графиков, верно, Карл?" - ловко подметит специалист по тестированию, и не важно, что этого не было в ТЗ а на часах уже половина 9-го.
Хотя график как сущность сам по себе сложнее таблиц и с графиками мы не работаем каждый день, EPPlus предоставляет довольно понятный API. Давайте добавим простейший график, отражающий рост капитализации:
Еще, может понадобиться защитить страницу от редактирования:
На этом все, репозиторий с рабочим приложением находится здесь.
Заключение
Во-первых, прежде всего, о том, что мы успешно справились с задачей, а именно, сгенерировали свой первый Excel отчет, поработали со стилями и даже решили пару попутных проблем.
Настоящая документация является предварительной и может быть изменена. В этом разделе показано, как использовать классы в Пакет Open XML SDK 2.5 для Office для вставки текста в ячейку на новом листе электронной таблицы программным способом.
Для компиляции кода в этом разделе необходимы следующие директивы сборки:
Получение объекта SpreadsheetDocument
В Open XML SDK пакет документа Excel представлен классом SpreadsheetDocument . Для открытия документа Excel и работы с ним следует создать экземпляр класса SpreadsheetDocument из документа. После создания экземпляра класса на основе документа можно получить доступ к основной части книги, которая содержит листы. Текст документа представлен в пакете в виде XML-кода с использованием разметки SpreadsheetML.
Чтобы создать экземпляр класса из документа, вызывается один из методов перегрузки Open(). Доступно несколько методов с разными сигнатурами. В примере кода в этой статье используется метод Open(String, Boolean) с сигнатурой, требующей два параметра. Первый параметр — это строка полного пути, представляющая открываемый документ. Второй параметр это значение true или false, которое указывает, будет ли файл открыт для редактирования. Если этот параметр имеет значение false, любые изменения, внесенные в документ, не будут сохранены.
Код, который вызывает метод Open, показан в следующем операторе using:
Оператор using представляет рекомендуемую альтернативу типичной последовательности методов .Open, .Save, .Close. Он гарантирует, что метод Dispose (внутренний метод, используемый Open XML SDK для очистки ресурсов) вызывается автоматически при достижении закрывающая фигурной скобки. Блок, который следует за оператором using, устанавливает область объекта, который создается или именуется в операторе using. В этом случае — это spreadSheet.
Базовая структура документа SpreadsheetML
Базовая структура документа SpreadsheetML состоит из элементов Sheets и Sheet, ссылающихся на листы в книге. Для каждого объекта Worksheet создается отдельный XML-файл. Например, элемент SpreadsheetML для объекта Workbook с двумя листами MySheet1 и MySheet2 находится в файле Workbook.xml и показан в следующем примере кода:
XML-файлы листов содержат один или несколько элементов уровня блока, например SheetData. Элемент sheetData представляет таблицу ячеек и содержит один или несколько элементов Row. Элемент row включает один или несколько элементов Cell. Каждая ячейка содержит элемент CellValue, представляющий значение ячейки. Например, элемент SpreadsheetML для первого листа книги, содержащего только значение 100 в ячейке A1, находится в файле Sheet1.xml и показан в следующем примере кода:
С помощью Пакет SDK 2.5 Open XML можно создать структуру и содержимое документа, использующие строго типизированные классы, соответствующие элементам SpreadsheetML. Эти классы можно найти в пространстве имен DocumentFormat.OpenXML.Spreadsheet. В следующей таблице перечислены имена классов, соответствующие элементам workbook, sheets, sheet, worksheet и sheetData.
Элемент SpreadsheetML | Класс пакета Open XML SDK 2.5 | Описание |
---|---|---|
книга | DocumentFormat.OpenXml.Spreadsheet.Workbook | Корневой элемент основной части документа. |
sheets | DocumentFormat.OpenXml.Spreadsheet.Sheets | Контейнер для структур уровня блока, таких как sheet, fileVersion, и других, указанных в спецификации ISO/IEC 29500. |
лист | DocumentFormat.OpenXml.Spreadsheet.Sheet | Лист, указывающий на файл определения листа. |
лист | DocumentFormat.OpenXml.Spreadsheet.Worksheet | Файл определения лист с данными листа. |
sheetData | DocumentFormat.OpenXml.Spreadsheet.SheetData | Таблица ячеек, сгруппированных по строкам. |
row | DocumentFormat.OpenXml.Spreadsheet.Row | Строка в таблице ячеек. |
c | DocumentFormat.OpenXml.Spreadsheet.Cell | Ячейка в строке. |
v | DocumentFormat.OpenXml.Spreadsheet.CellValue | Значение ячейки. |
Как работает пример кода
После открытия документа SpreadsheetDocument для редактирования код вставляет пустой объект Worksheet в пакет документа SpreadsheetDocument. После этого новый объект Cell вставляется в новый лист, а в соответствующую ячейку вставляется указанный текст.
Код передает параметр, представляющий текст, который необходимо вставить в ячейку, и параметр, представляющий объект SharedStringTablePart электронной таблицы. Если объект ShareStringTablePart не содержит объект SharedStringTable, код создает его. Если текст в объекте ShareStringTable уже существует, код возвращает индекс объекта SharedStringItem, представляющего текст. В противном случае создается новый объект SharedStringItem.
Следующий код проверяет, существует ли указанный текст в объекте SharedStringTablePart, и добавляет текст, если он не существует:
Код добавляет новый объект WorksheetPart в объект WorkbookPart, используя метод AddNewPart. Затем он добавляет новый объект Worksheet в объект WorksheetPart и получает уникальный идентификатор нового листа, выбирая максимальный объект SheetId, используемый в электронной таблице, и добавляет еще один, чтобы создать новый идентификатор листа. Имя листа образовывается путем объединения слова Sheet с идентификатором листа. Затем новый объект Sheet добавляется в коллекцию Sheets.
Следующий код вставляет новый объект Worksheet, добавляя новый объект WorksheetPart в WorkbookPart:
Чтобы вставить ячейку на лист, код определяет, куда необходимо вставить новую ячейку в столбце, последовательно проходя по элементам row для поиска ячейки, следующей непосредственно после указанной строки. Он сохраняет эту строку в переменной refCell. Затем он вставляет новую ячейку перед ячейкой, на которую ссылается refCell, используя метод InsertBefore.
Следующий код вставляет новый объект Cell в объект Worksheet:
Пример кода
Следующий пример кода вставляет новый лист и записывает текст в ячейку "A1" нового листа электронной таблицы с именем "Sheet8.xlsx". Для вызова метода InsertText можно использовать следующий код в качестве примера.
Версия этой статьи для Microsoft Visual Basic 6,0 приведена в статье 247412.
Обзор
Метод, наиболее часто используемый для передачи данных в книгу Excel, является автоматизацией. С помощью автоматизации можно вызывать методы и свойства, относящиеся к задачам Excel. Автоматизация предоставляет максимальную гибкость для указания расположения данных в книге, форматирования книги и создания различных параметров во время выполнения.
С помощью автоматизации вы можете использовать различные методы для переноса данных:
- Перемещение ячейки данных по ячейке.
- Передача данных в массиве в диапазон ячеек.
- Перенесите данные из набора записей ADO в диапазон ячеек с помощью метода Копифромрекордсет.
- Создайте объект QueryTable на листе Excel, который содержит результат запроса в источнике данных ODBC или OLEDB.
- Перенесите данные в буфер обмена, а затем вставьте содержимое буфера обмена в лист Excel.
Вы также можете использовать несколько методов, которые не требуют автоматизации для передачи данных в Excel. Если вы используете серверную программу, это может быть хорошим подходом к отходящей обработке данных от клиентов.
Для переноса данных без автоматизации можно использовать следующие подходы:
Способ
Использование автоматизации для передачи ячейки данных по ячейкам
С помощью автоматизации можно переносить данные на лист по одной ячейке за раз:
Опять же, передача данных по ячейке допускается только для небольших объемов данных. Если необходимо перенести большие наборы данных в Excel, рекомендуется использовать один из других подходов, описанных в этой статье, для массовой передачи данных.
Использование автоматизации для переноса массива данных в диапазон листа
Вы можете перенести массив данных в диапазон из нескольких ячеек за один раз:
Если вы переносите данные с помощью массива, а не ячейки по ячейке, вы можете реализовать огромную производительность с большим количеством данных. Рассмотрите следующие строки из вышеупомянутого кода, которые передают данные в 300 ячейки листа:
Этот код представляет два запроса интерфейса: один для объекта Range, возвращаемого методом Range, и другой для объекта Range, который возвращает метод Resize. В отличие от переноса ячейки данных по ячейке, необходимо запросить интерфейсы 300 для объектов Range. Если это возможно, вы можете воспользоваться преимуществами для массового переноса данных и уменьшения количества запросов к интерфейсу.
Для получения дополнительных сведений о том, как использовать массивы для получения и задания значений в диапазонах с помощью автоматизации Excel, щелкните номер статьи ниже, чтобы просмотреть статью в базе знаний Майкрософт:
Использование автоматизации для переноса набора записей ADO в диапазон листа
Объектные модели для Excel 2000, Excel 2002 и Excel 2003 предоставляют метод Копифромрекордсет для переноса набора записей ADO в диапазон листа. В приведенном ниже коде показано, как автоматизировать Excel для переноса содержимого таблицы Orders в образце базы данных Northwind с помощью метода Копифромрекордсет:
Использование автоматизации для создания объекта QueryTable на листе
Объект QueryTable представляет таблицу, созданную на основе данных, возвращаемых из внешнего источника данных. При автоматизации Excel можно создать QueryTable, предоставив строку подключения к OLE DB или источнику данных ODBC, а также строку SQL. Excel создает набор записей и вставляет набор записей на лист в указанном расположении. Объекты QueryTable имеют следующие преимущества по сравнению с методом Копифромрекордсет:
- Excel обрабатывает создание набора записей и его расположение на листе.
- Вы можете сохранить запрос с помощью объекта QueryTable и обновить его позже, чтобы получить обновленный набор записей.
- Когда на лист добавляется новый QueryTable, вы можете указать, что данные, которые уже существуют в ячейках листа, будут сдвинуты для обработки новых данных (Дополнительные сведения см. в свойстве Рефрешстиле).
В приведенном ниже коде показано, как автоматизировать Excel 2000, Excel 2002 или Excel 2003 для создания нового QueryTable на листе Excel с помощью данных из учебной базы данных Northwind:
Использование буфера обмена Windows
Создание текстового файла с разделителями, который Excel может проанализировать по строкам и столбцам
Excel может открывать файлы с разделителями табуляцией и запятыми и правильно анализировать данные в ячейки. Эту функцию можно использовать, если требуется перенести большое количество данных на лист, используя небольшую, при автоматизации. Это может быть хорошим подходом к клиент-серверной программе, так как текстовый файл может быть создан на стороне сервера. Затем можно открыть текстовый файл на клиенте, используя автоматизацию там, где это необходимо.
Приведенный выше код не использует автоматизацию. Однако при желании можно использовать автоматизацию для открытия текстового файла и сохранения файла в формате книги Excel, как показано ниже:
С помощью поставщика OLE DB для Microsoft Jet можно добавлять записи в таблицу из существующей книги Excel. Таблица в Excel — это всего лишь диапазон ячеек; диапазон может иметь определенное имя. Как правило, первая строка диапазона содержит заголовки (или имена полей), а все последующие строки в диапазоне содержат записи.
Приведенный ниже код добавляет две новые записи в таблицу в Book7. xls. В этом случае таблицей является Лист1:
Для получения дополнительных сведений об использовании поставщика OLEDB для Jet с источниками данных Excel щелкните номера статей ниже, чтобы просмотреть статьи базы знаний Майкрософт:
278973 пример: в ексцеладо показано, как использовать ADO для чтения и записи данных в книгах Excel
257819 практическое руководство: использование ADO с данными Excel из Visual Basic или VBA
Передача XML-данных (Excel 2002 и Excel 2003)
Excel 2002 и 2003 могут открыть любой XML-файл с правильным форматом. XML-файлы можно открыть непосредственно с помощью команды открыть в меню файл или программным путем с помощью методов Open и OpenXML коллекции книги. Если вы создаете XML-файлы для использования в Excel, вы также можете создать таблицы стилей для форматирования данных.
Создание новой папки с именем К:\ексцелдата. В этом примере программа будет хранить книги Excel в этой папке.
Создайте новую книгу для примера, в который необходимо выполнить запись:
- Создайте новую книгу в Excel.
- На листе Sheet1 новой книги введите FirstName в ячейке a1 и LastName в ячейке B1.
- Выберите a1: B1.
- В меню Вставка выберите пункт имя, а затем — команду определить. Введите имя MyTable и нажмите кнопку ОК.
- Сохранение книги в виде C:\Exceldata\Book7.xls.
- Закройте Excel.
Добавьте ссылку на библиотеку объектов Excel и основную сборку взаимодействия ADODB. Для этого выполните следующие действия:
- On the Project menu, click Add Reference.
- На вкладке Сеть найдите ADODB и нажмите кнопку Выбрать.
Обратите внимание, что в Visual Studio 2005 нет необходимости щелкать кнопку выбрать.
3. На вкладке COM найдите объектная Библиотека Microsoft Excel 10,0 или библиотека объектов Microsoft Excel 11,0, а затем нажмите кнопку Выбрать.
Обратите внимание, что в Visual Studio 2005 нет необходимости щелкать кнопку выбрать.
Примечание Если вы используете Microsoft Excel 2002, а вы еще не сделали это, корпорация Майкрософт рекомендует скачать и установить основные сборки взаимодействия Microsoft Office XP (PIA).
В диалоговом окне Добавление ссылок нажмите кнопку ОК, чтобы принять выбранные параметры.
Добавление элемента управления "поле со списком" и элемента управления "Кнопка" в форму Form1.
Добавьте обработчики событий для события загрузки формы и событий Click элемента управления Button:
- В представлении конструктора для Form1.cs дважды щелкните элемент Form1.
Обработчик события Load для формы создан и отображается в Form1.cs.
2. В меню Вид выберите конструктор, чтобы переключиться в режим конструктора.
3. Дважды щелкните элемент Button1.
Обработчик события нажатия кнопки создается и отображается в Form1.cs.
В Form1.cs замените приведенный ниже код.
Добавьте следующие директивы using в директивы using в Form1.cs:
Нажмите клавишу F5 для сборки и запуска примера.
Ссылки
Для получения дополнительных сведений посетите следующий веб-сайт Майкрософт:
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Вставляет в рабочий лист содержимое буфера обмена с использованием указанного формата. Данный метод используется для вставки данных из других приложений или вставки данных в определенном формате.
Параметры
Строка, задающая формат буфера обмена для данных. Строки общих форматов включают следующее: "HTML", "Bitmap", "Hyperlink", "Unicode Text" и "Text".
Значение true используется для установления связи с источником копируемых данных. Если исходные данные не допускают связывание или связывание не поддерживается исходным приложением, этот параметр игнорируется. Значение по умолчанию — false .
Значение true используется для отображения вставляемого объекта в виде значка. Значение по умолчанию — false .
Имя файла, содержащего используемый значок, если параметр DisplayAsIcon имеет значение true .
Номер индекса значка в пределах файла значков.
Текстовая метка значка.
Значение true для удаления любых элементов форматирования, гиперссылок и изображения из HTML-кода; значение false для вставки HTML-кода в неизменном виде. Значение по умолчанию — false .
Комментарии
Если вы не уверены, какую строку следует передать в параметр format, можно просмотреть строки, совместимые с данными в буфере обмена, выполнив команду вставки в Excel. Скопируйте данные в буфер обмена, используйте команду "Специальная Вставка " в Excel, а затем просмотрите форматы, перечисленные в диалоговом окне " Специальная вставка ".
NoHTMLFormatting имеет значение, только если Format = "HTML". Во всех остальных случаях NoHTMLFormatting будет игнорироваться.
Перед использованием этого метода необходимо выбрать диапазон назначения.
Этот метод может изменить выбор листа в зависимости от содержимого буфера обмена.
Необязательные параметры
Дополнительные сведения о необязательных параметрах см. в разделе необязательные параметры в решениях Office.
В этом разделе с использованием новых функций будет написан код, который создает и отображает лист Microsoft Office Excel. После этого будет написан код для добавления документа Office Word, который содержит значок, ссылающийся на лист Excel.
Для выполнения данного пошагового руководства на компьютере должны быть установлены Microsoft Office Excel 2007 и Microsoft Office Word 2007 или более поздние версии продуктов.
Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Персонализация среды IDE.
Создание нового проекта консольного приложения
Запустите Visual Studio.
В меню Файл выберите пункт Создать, а затем команду Проект. Откроется диалоговое окно Новый проект .
В области Шаблоны щелкните Консольное приложение.
Введите имя проекта в поле Имя.
В обозревателе решений появится новый проект.
Добавление ссылок
В обозревателе решений щелкните имя проекта правой кнопкой мыши и выберите пункт Добавить ссылку. Откроется диалоговое окно Добавление ссылки.
На странице "Сборки" выберите Microsoft.Office. Interop.Word в списке имен компонентов, а затем удерживайте клавишу CTRL и выберите Microsoft.Office. Взаимодействия. Excel. Если сборки отсутствуют, может потребоваться проверить, что они установлены и отображаются. См. практическое руководство по установке основных сборок взаимодействия Microsoft Office.
Добавление необходимых директив using
В обозревателе решений щелкните правой кнопкой мыши файл Program.cs и выберите пункт Просмотреть код.
Создание списка банковских счетов
Вставьте следующее определение класса в файл Program.cs в класс Program .
Чтобы создать список bankAccounts , содержащий два счета, добавьте в метод Main следующий код.
Объявление метода, экспортирующего сведения о счетах в Excel
Чтобы настроить лист Excel, добавьте в класс Program следующий метод.
Добавьте в конец метода DisplayInExcel следующий код. Этот код вставляет значения в первые два столбца первой строки листа.
Добавьте в конец метода DisplayInExcel следующий код. Цикл foreach помещает сведения из списка счетов в первые два столбца последовательных строк листа.
Добавьте в конец метода DisplayInExcel следующий код, чтобы ширина столбца изменялась в соответствии с содержимым.
Запуск проекта
Добавьте в конец метода Main следующую строку.
Нажмите клавиши CTRL+F5.
Появится книга Excel, содержащая данные о двух счетах.
Добавление документа Word
Добавьте в конец метода Main следующую инструкцию.
Добавьте в конец метода DisplayInExcel следующую инструкцию. Метод Copy добавляет лист в буфер обмена.
Нажмите клавиши CTRL+F5.
Появится документ Word, содержащий значок. Дважды щелкните значок, чтобы отобразить лист на переднем плане.
Задание свойства "Внедрить типы взаимодействия"
При вызове типа COM, который не требует во время выполнения основной сборки взаимодействия (PIA), можно использовать дополнительные усовершенствования. Избавление от зависимостей от PIA приводит к независимости версий и делает развертывание более простым. Дополнительные сведения о преимуществах программирования без основных сборок взаимодействия см. в руководстве по внедрению типов из управляемых сборок.
Кроме того, писать программы стало проще, поскольку типы, принимаемые и возвращаемые методами COM, можно представить с помощью типа dynamic вместо типа Object . Переменные типа dynamic не вычисляются до времени выполнения, что позволяет обходиться без явного приведения. Дополнительные сведения см. в разделе Использование типа dynamic.
Чтобы изменить поведение по умолчанию и использовать сборки PIA вместо внедрения сведений о типе, разверните узел Ссылки в обозревателе решений и выберите Microsoft.Office.Interop.Excel или Microsoft.Office.Interop.Word.
Если окно Свойства не отображается, нажмите клавишу F4.
В списке свойств найдите свойство Внедрить типы взаимодействия и измените его значение на False. Также можно выполнить компиляцию с помощью командной строки с использованием параметра компилятора References вместо EmbedInteropTypes.
Дополнительное форматирование таблицы
Замените два вызова AutoFit в методе DisplayInExcel следующей инструкцией.
У метода AutoFormat имеется семь параметров значений, и все они являются необязательными. Именованные и необязательные аргументы позволяют задать аргументы для всех параметров, их части или ни для одного параметра. В приведенной выше инструкции аргумент задается только для одного из параметров, Format . Поскольку Format является первым параметром в списке, имя параметра указывать не требуется. Однако инструкция может быть проще для понимания, если указать имя параметра, как показано в следующем фрагменте кода.
Нажмите сочетание клавиш CTRL + F5, чтобы увидеть результат. Другие форматы представлены в перечислении XlRangeAutoFormat.
Читайте также: