Vb net создать файл excel

Обновлено: 06.07.2024

@Mike Часть «не требующая установки Excel» не имеет ничего общего с профессионализмом. Это о зависимостях. Первоначальный текст вопроса был сформулирован так: «В идеале, я хотел бы, чтобы с открытым исходным кодом, поэтому мне не нужно было добавлять какие-либо сторонние зависимости в мой код, и я хотел бы избежать использования Excel непосредственно для создания файла (используя OLE Автоматизация.) « К сожалению, вопрос был резко упрощен. Предполагая, что вы пытаетесь сделать что-то без библиотеки или внешнего кода, я не могу говорить о файле xls, но о файлах xlsx, почему бы не начать с того, чтобы взять существующий, переименовать его в zip-файл и изучить содержимое? Немного обратного инжиниринга расскажет вам совсем немного. Существует несколько разных XML-файлов и файлов Rels в различных папках и подпапках. Попробуйте изучить это и посмотреть, можете ли вы это повторить, или посмотрите, можете ли вы найти документацию по различным пространствам имен / схемам xml. @AlexanderRyanBaggett Это было очень полезно! Столкнулся с этим постом, работая над автоматическим созданием отчетов и изучением документов в виде zip-архива, который дает представление о том, что входит в создание файла документа.

Вы можете использовать библиотеку под названием ExcelLibrary. Это бесплатная библиотека с открытым исходным кодом, размещенная в Google Code:

Это выглядит как порт PHP ExcelWriter, который вы упомянули выше. Он пока не будет писать в новый формат .xlsx, но они работают над добавлением этой функциональности в.

Это очень просто, маленький и простой в использовании. Кроме того, он имеет DataSetHelper, который позволяет вам использовать DataSets и DataTables для удобной работы с данными Excel.

ExcelLibrary, кажется, все еще работает только для более старого формата Excel (файлы .xls), но может добавить поддержку в будущем для новых форматов 2007/2010.

Вы также можете использовать EPPlus , который работает только для файлов формата Excel 2007/2010 (файлы .xlsx). Есть также NPOI, который работает с обоими.

Есть несколько известных ошибок с каждой библиотекой, как отмечено в комментариях. В целом, EPPlus кажется лучшим выбором с течением времени. Кажется, что он также более активно обновляется и документируется.

Кроме того, как отмечает @ АртёмЦарионов ниже, EPPlus имеет поддержку сводных таблиц, а ExcelLibrary может иметь некоторую поддержку ( проблема сводных таблиц в ExcelLibrary )

Вот пример кода для ExcelLibrary:

Вот пример получения данных из базы данных и создания из нее рабочей книги. Обратите внимание, что код ExcelLibrary - это одна строка внизу:

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

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

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

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

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

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

Настройка надстройки Excel

Запустите Visual Studio.

В меню Файл выберите пункт Создать, а затем команду Проект.

В области Шаблоны выберите Надстройка Excel <version> .

Если нужно, в поле Имя введите имя проекта.

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

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

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

На вкладке Сборки в списке Имя компонента выберите Microsoft.Office.Interop.Excel, версия <version>.0.0.0 (расшифровку номеров версий продуктов Office см. в разделе Версии Майкрософт), а затем, удерживая нажатой клавишу CTRL, выберите Microsoft.Office.Interop.Word, version <version>.0.0.0 . Если сборки отсутствуют, может потребоваться проверить, что они установлены и отображаются (см. раздел Практическое руководство. Установка основных сборок взаимодействия Microsoft Office).

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

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

В верхнюю часть файла с кодом добавьте следующие операторы Imports (Visual Basic) или директивы using , если это еще не сделано.

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

Замените определение класса Account следующим кодом. В определениях классов используются автоматически реализуемые свойства. Дополнительные сведения см. в разделе Автоматически реализуемые свойства.

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

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

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

В более ранних версиях этого языка приходилось использовать особый синтаксис.

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

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

Например, excelApp.Columns[1] возвращает Object , а AutoFit является методом Excel Range. Без типа dynamic необходимо выполнять приведение объекта, возвращаемого excelApp.Columns[1] , к экземпляру Range перед вызовом метода AutoFit .

Дополнительные сведения о внедрении типов взаимодействия см. в подразделах "Поиск ссылки PIA" и "Восстановление зависимости PIA" далее в этом разделе. Дополнительные сведения о dynamic см. в разделе dynamic или Использование типа dynamic.

Вызов метода DisplayInExcel

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

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

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

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

Запуск приложения

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

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

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

Поиск ссылки PIA

Запустите приложение снова, но не выбирайте пункт Очистить решение.

Выберите кнопку Пуск. Найдите Microsoft Visual Studio <version> и откройте командную строку разработчика.

В окне командной строки разработчика для Visual Studio введите команду ildasm , а затем нажмите клавишу ВВОД. Появится окно программы IL DASM.

В меню Файл в окне IL DASM выберите пункт Файл > Открыть. Дважды щелкните Visual Studio <version> и Проекты. Откройте папку проекта и найдите в папке 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 не обязательно должны присутствовать на компьютере пользователя, а поскольку приложение не требует развертывания конкретной версии сборки PIA, можно разрабатывать приложения, которые работают с различными версиями Office, если в этих версиях имеются все необходимые интерфейсы API.

Поскольку развертывать сборки PIA больше не требуется, можно создавать приложения для применения в сложных сценариях, чтобы эти приложения работали с несколькими версиями Office, включая и более ранние версии. Тем не менее это возможно только в том случае, если в коде не используются интерфейсы API, которые недоступны в используемой версии Office. Разработчик не всегда знает, был ли доступен тот или иной интерфейс API в более ранней версии, поэтому работать с более ранними версиями Office не рекомендуется.

До Office 2003 сборки PIA не публиковались. Поэтому единственными способом создания сборки взаимодействия в Office 2002 или более ранних версиях является импорт ссылки COM.

Закройте окно манифеста и окно сборки.

Восстановление зависимости PIA

В обозревателе решений нажмите кнопку Показать все файлы. Разверните папку Ссылки и выберите Microsoft.Office.Interop.Excel. Нажмите клавишу F4, чтобы открыть окно Свойства.

В окне Свойства измените значение свойства Внедрить типы взаимодействия с True на False.

Повторите шаги 1 и 2 этой процедуры для сборки Microsoft.Office.Interop.Word .

Нажмите клавишу F5, чтобы проверить, что проект по-прежнему выполняется правильно.

Повторите шаги 1–3 из предыдущей процедуры, чтобы открыть окно сборки. Обратите внимание, что сборки Microsoft.Office.Interop.Word и Microsoft.Office.Interop.Excel больше не входят в список внедренных сборок.

Дважды щелкните значок МАНИФЕСТ и просмотрите список сборок, на которые имеются ссылки. В списке будут указаны сборки Microsoft.Office.Interop.Word и Microsoft.Office.Interop.Excel . Поскольку приложение содержит ссылки на сборки PIA Excel и Word, а свойство Внедрить типы взаимодействия имеет значение False, на компьютере пользователя должны храниться обе сборки.

В Visual Studio в меню Построение выберите пункт Очистить решение, чтобы очистить завершенный проект.

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

Теперь поговорим о том, как можно написать функции или процедуру для вывода данных в Excel. Я приведу простой пример, который будет заполнять лист Excel абстрактными данными. В Вашем случае вы можете передавать данные в виде параметров метода или получать их прям в самом методе использую расчеты или запросы к базе данных. Содержимое метода выглядит следующим образом (комментарии ниже):

В результате выполнения этих строк перед вами, на экране монитора, появиться окно Excel, с открытой книгой содержащей одни лист. В ячейке A1 будет написано «Дарова мир. ».

Рассмотрим детали кода. Первые три строки объявляют необходимые три объекта для работы с документами Excel. Первая фактически создаёт и запускает копию самого Excel без каких либо открытых книг. Вторая строка создает объект, который является новой книгой в нашей копии программы. Ну и третья строк добавляет один единственный лист в книгу и объявляет объект, при помощи которого мы будем заносить в лист информацию. Четвертая строка, это самая простейшая манипуляция над листом – внесение текстовой информации в ячейку. Последней строкой мы делаем нашу копию Excel видимой. До этого момента она является не видимой с той целью, чтобы пользователи не пугались видя процесс внесения информации (при больших объёмах данных он может быть заметен не вооруженным глазом) и не могли помешать работе функции экспорта.

Многих могут устроить именно эти строки, так как их достаточно для написания собственной функции простейшего вывода. Но более искушенный программист, а что еще хуже заказчик, может иметь желание видеть не просто набор серых данных, а хорошо отформатированную и оформленную структуру, с заголовками, выравниванием, полужирными начертаниями, заданной шириной столбцов, наличием формул и прочего, на что способен настоящий документ Excel. Если описывать все возможности Excel и, соответственно, вашего когда, понадобиться очень много времени, и в итоге получиться большая книга – а это не цель моей статьи. Я расскажу вам как можно, используя макросы Excel получить именно тот результат, которого вы хотите в довольно короткий срок.

Допустим Вы хотите выделить текст одной из ячеек при экспорте данных полужирным начертанием. Делам следующее. Открываем Excel. Пишем в одной из ячеек произвольный текст, кликаем по другой ячейке. После этого необходимо начать запись макроса. Например в 2007 офисе это можно сделать в меню Вид->Макросы->Запись макроса, после чего появиться окно, в котором необходимо поставить любую букву в поле «Сочетание клавиш» и в списке «Сохранить в» выбрать «Эта книга», нажать кнопку Ок. После этого Excel начнет записывать в макрос в виде строк кода на языке VBA (Visual Basic for Application) все то, что Вы будете проделывать с листами и книгой. Выделите ячейку с произвольным текстом, при помощи меню сделайте ее начертание полужирным. Excel моментально запишит строчки кода в макрос. Чтобы сильно не мусорить в макросе по возможности больше ничего не делайте с ячейками, листами и книгой. Пройдите в меню Вид->Макросы->Остановить запись. Далее в меню Вид->Макросы[->Макросы] выберете последнее из списка и нажмите кнопку изменить. Откроется окно с кодом макроса примерно такого содержания:

Используя этот код можно модифицировать нашу первую функцию экспорта. Теперь она будет выглядеть следующим образом:

Таким образом, мы можем получить любые интересующие нас фрагменты кода.

Чтобы не затруднять ваши поиски элементарных, обычно используемых вещей я приведу некоторые методы, своийства и значения констант.

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

Исходные данные

Сначала давайте разберем исходные данные, которые я буду использовать в примерах. Пусть это будет некая абстракция марок автомобилей с указанием их VIN номера.

Примечание! Я использую Excel 2013.

Скриншот 2

В зависимости от конкретных требований и условий, задачу можно реализовать по-разному, хотя принцип будет один и тот же, в этой статье мы рассмотрим несколько вариаций реализации.

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

Итак, данные у нас есть, теперь необходимо написать процедуру на VBA (макрос), которая брала бы значение из конкретной ячейки, в данном случае это будет ячейка B14, и присваивала бы это значение имени файла.

Если нужно сохранять макрос в каждом файле, т.е. файлы с поддержкой макросов (расширение .xlsm), то необходимо просто указать другой тип файла при сохранении, а именно xlOpenXMLWorkbookMacroEnabled, в процедурах в комментариях я это указываю.

Открываем в Excel редактор Visual Basic, и вставляем код следующей процедуры в исходный код этой книги (ЭтаКнига, открыть двойным кликом) или в модуль, который Вы предварительно должны создать.

Примечание! Для того чтобы открыть редактор Visual Basic в Excel, необходимо перейти на вкладку «Разработчик» и нажать на кнопку «Visual Basic». Файл Excel с кодом процедуры необходимо сохранить с типом «Книга Excel с поддержкой макросов».

Код процедуры

После сохранения файла запустите макрос («Макросы -> Выполнить -> SaveFile»).

Скриншот 3

Добавление кнопки в Excel для запуска макроса

Каждый раз открывать окно с макросами и выбирать нужный макрос не очень удобно, поэтому можно легко добавить кнопку где-нибудь рядом с данными и просто нажимать ее. Это делается следующим образом «Вкладка Разработчик -> Вставить -> Кнопка (элемент управления формы)».

Скриншот 4

Затем выберите место, где вставить кнопку, и нажмите туда. После этого появится окно назначения действия, т.е. нужно выбрать, какой макрос запускать при нажатии этой кнопки, выбираем наш макрос, т.е. SaveFile, и нажимаем «ОК».

Скриншот 5

В итоге появится кнопка с названием «Кнопка», это название лучше изменить, например, на «Сохранить файл». Для этого нажмите правой кнопкой мыши на кнопку и выберите настройки «Изменить текст». В итоге у Вас должно получиться что-то вроде этого.

Скриншот 6

Теперь давайте представим, что заранее мы не можем определить, какая именно ячейка будет формировать название файла (может B14, а может и нет), поэтому мы можем немного скорректировать алгоритм таким образом, чтобы он брал значение из ячейки, которая является активной, но в этом случае Вы, конечно же, предварительно, должны выбрать ее (т.е. встать на нее).

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

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

Скриншот 7

Как видим, все отработало.

Сохранение файла Excel с названием, которое сформировано из значений двух ячеек

Теперь представим, что нам нужно сформировать файл с названием из значений двух ячеек. Например, в нашем случае это может быть «Марка Авто – VIN Номер», в качестве разделителя я указал символ – (дефис), но им может выступать любой символ или вовсе отсутствовать.

В этом примере я покажу, как можно это реализовать с привязкой к конкретным ячейкам, в нашем случае B14 и D14.

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

Скриншот 8

Все ОК, файл создан.

Если вдруг нужно реализовать без привязки к конкретным ячейкам, например, значения хранятся в определённых столбцах, но конкретная строка неизвестна Вам заранее. Например, у меня несколько строк со значениями, и какие конкретно значения взять за основу названия файла, я хочу указывать самостоятельно, непосредственно перед сохранением, но при этом не редактировать код процедуры.

Для этого мы снова внесем изменения в нашу процедуру, которая будет работать от активной ячейки (смещение от активной ячейки), только с условием того, что выбран столбец с теми значениями, которые необходимо использовать.

Код процедуры

Становитесь на любую ячейку со значением в столбце B, и запускайте макрос.

Читайте также: