Remkomplekty.ru

IT Новости из мира ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Создание файла excel vb net

Экспорт данных в EXCEL средствами VB.NET

Продукты компании Microsoft крепко вошли в нашу жизнь. Не смотря на разные нарекания в сторону самой компании и ее продуктов, мало кто может похвастаться столь функциональными и удобными программами. Даже те кто является ярым приверженцем того что Microsoft это зло и использует, например, сторонние операционные системы, как бы это не было парадоксально, ставят себе на компьютер эмуляторы Windows и прочие примочки, которые позволяют работать программам от Microsoft или под Microsoft. И Excel и VB.NET вместе со всей студией являются большими, занимающими лидирующие положения программными обеспечениями. Одним пользуетесь Вы, раз читаете статью, другим пользуются ваши заказчики. Очень часто клиенты хотят видеть результаты работы программ, или как их любят называть «АРМ» и «ИС», в виде документов, с которыми они умеют работать, которые можно корректировать, которые берут на себя часть формирования наглядности. И их выбором становиться файлы в формате Excel. И нет ничего проще, чем написать работу в языке программирования от Microsoft c другой программой от той же фирмы, о чем мы и поговорим.

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

Вначале необходимо подключить к вашему проекту библиотеку (ссылку, reference). Это можно сделать в меню Проект->Добавить ссылку (Project –> Add reference…). После выбора этого пункта меню перед Вами появиться модальное окно, с которым многие из Вас уже знакомы. Для тех, кто видит его впервые, опишу его кратко. В этом окне вы можете подключать к вашему проекту сторонние библиотеки (как правило файлы формата .dll), которые несут в себе какой-либо функционал. Библиотеки написаны на различных языках программирования и с применением различных технологий, но это не мешает их работе в вашем проекте. Особый интерес тут представляют три вкладки, одной из которых мы воспользуемся. Это вкладки .NET, COM, и Browse (Открыть существующие). Назначение последней вкладки понятно из названия. Различия первых двух состоит в различии технологий, которые использовались при написании данных библиотек. Вкладка .NET содержит библиотеки которые написаны с применением технологии .NET, более современной технологии. Библиотеки вкладки COM, это библиотеки написанные по старой технологии, которые не являются родными для студии VS.NET, но которые также могут работать в Вашей программе.

В нашем случае нас интересует вкладка .NET, в списке библиотек которой Вы можете найти Microsoft.Offoce.Interopt.Excel. Если их будет несколько, обратите внимание на версии. После того как вы выберете нужную Вам библиотеку нажмите кнопку Ok, и на этом этап подключения библиотеки будет закончен.

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

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

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

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

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

Читать еще:  Vba excel elseif

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

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

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

Работа с excel: Открытие, чтение, запись, сохранение книги

Открытие книги Excel с паролем
Задал пароль для книги эксель. Пытаюсь подцепить и открыть Книгу в своем проекте и вывести данные.

Чтение и сохранение записи из БД. При загрузке получить последнюю запись в БД
Здравствуйте! Визуал студио бейсик 2010, как при загрузки формы для заполнения базы данных, форма.

Чтение, редактирование и запись данных из MS Excel
Доброго времени суток товарищи! Программирую на VB 2010 не долго, можно сказать на "вы".

Чтение и запись информации с листа Excel
Ребята помогите пожалуста , у меня на форме 2 кнопки , кнопка-read и кнопка-write и ещё textbox.

Решение

Решение

1)Добавляем в референцы ссылку на Microsoft Excel 11 object library

активирует лист за номером 2 в книге.
Все остальное — см члены переменных _excel и _workbook. Плюс пользуйся макрорекордером, встроенным в эксель. Там синтаксис на 90% совпадет, ну разве что по мелочам поменяешь.

Еще: в самом начале мы добавили ссылку на библу экселя. Это называется «раннее связывание».
Можно было не добавлять. Тогда это позднее связывание. Тогда ситуация такая:

А здесь что именно писать?

Добавлено через 6 минут
Нашол где чо, только у меня Microsoft Excel 14 object library или здесь без разницы, прсото версия поновей?

Добавлено через 6 минут
От себя дабавлю что пример Памирыч не применим для стартового изучения, поскольку без импорта библиотеки не выскакивают подсказки с вариантами, а без этого лично мне очень тяжео разобраться.

это у тебя просо офис поновее. Кажется 2010.

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

Добавлено через 1 час 48 минут
Забыл про обьявления

Памирыч, Добрый день! Очень мало инфы по exel для неопытных пользователей в интернете. Если не затрудник, не могли бы взглянуть на проблему?
с тем как записать и вывести значение + закрывание процесса я разобрался. Но теперь не могу сдеать основное действие.
Нужно найти первую ячейку в столбике B2 по формату( любой цвет который введем, допустим черный)Найти- разукрасить в красный и выдать нам сообщение, причем ячеек может быть не 1 , что мы и спрашиваем в inputbox. В vba у меня получилось, а сюда перенести не могу. Ошибка выскакивает на _Excel.xlFormulas, xlPart, xlByColumns..в общем уточняющих. Как верно нужно объявлять? Он пишет что они не относятся к _Excel

Добавлено через 37 минут
Памирыч, нашел рабочий пример на англиццком, если поможете подогнать под мою задачу, было бы отлично. как задать формат поиска, а не row искать.

Корпоративный блог Центра Высоких Технологий

Рано или поздно вам потребуется напечатать отчет в формате какого-либо офисного приложения. Так как процент людей, пользующихся StarOffice невелик, то скорее всего это будет всеми любимый Microsoft Office. 😉

Итак, в этой статье мы рассмотрим, как напечатать отчет в формате MS Excel (не забудьте, что для начала в проект необходимо добавить ссылку на соответствующий assembly). Создадим процедуру, которая получает на вход какой-либо объект с данными (в нашем случае это DataGridView), генерирует на их основе ответ и выводит его на печать. Ниже приведен пример с пояснениями:

Private Sub ExportToExcel(ByVal dgv As DataGridView)
Dim ObjExcel As New Microsoft.Office.Interop.Excel.Application() ‘ инициализируем excel-приложение
Dim ObjWorkBook As Microsoft.Office.Interop.Excel.Workbook ‘ создаем объект книги
Dim ObjWorkSheet As Microsoft.Office.Interop.Excel.Worksheet ‘ создаем объект страницы листа

ObjExcel.Visible = False ‘ делаем приложение невидимым пользователю
ObjWorkBook = ObjExcel.Workbooks.Add() ‘ добавляем новую книгу в приложение
ObjWorkSheet = ObjWorkBook.Worksheets(1) ‘ получаем доступ к первой странице

ObjWorkSheet.Columns(1).ColumnWidth = 20 ‘ устанавливаем ширину колонок.

ObjWorkSheet.Columns(2).ColumnWidth = 20
ObjWorkSheet.Columns(3).ColumnWidth = 10
ObjWorkSheet.Columns(4).ColumnWidth = 25
ObjWorkSheet.Columns(5).ColumnWidth = 4
ObjWorkSheet.Columns(6).ColumnWidth = 4
ObjWorkSheet.Columns(7).ColumnWidth = 15
ObjWorkSheet.Columns(8).ColumnWidth = 15

ObjWorkSheet.Rows(1).Font.Bold = True
ObjWorkSheet.Rows(1).font.size = 8 ‘ устанавливаем размер шрифта

ObjWorkSheet.Cells(1, 1).Value = «Direct» ‘ заполняем названия столбцов
ObjWorkSheet.Cells(1, 2).Value = «Reverse»
ObjWorkSheet.Cells(1, 3).Value = «Volume»
ObjWorkSheet.Cells(1, 4).Value = «Instrument Type»
ObjWorkSheet.Cells(1, 5).Value = «Book»
ObjWorkSheet.Cells(1, 6).Value = «Page»
ObjWorkSheet.Cells(1, 7).Value = «Filing Date»
ObjWorkSheet.Cells(1, 8).Value = «Instrument Date»

Dim i As Integer = 2
Dim j As Integer = 0
Dim dr As DataGridViewRow
For Each dr In dgv.Rows ‘ в цикле заполняем таблицу данными
ObjWorkSheet.Cells(i, 1).Value = dr.Cells( «Direct»).Value
ObjWorkSheet.Cells(i, 2).Value = dr.Cells( «Reverse»).Value
ObjWorkSheet.Cells(i, 3).Value = dr.Cells( «Volume»).Value
ObjWorkSheet.Cells(i, 4).Value = dr.Cells( «InstrType»).Value
ObjWorkSheet.Cells(i, 5).Value = dr.Cells( «Book»).Value
ObjWorkSheet.Cells(i, 6).Value = dr.Cells( «Page»).Value
ObjWorkSheet.Cells(i, 7).Value = dr.Cells( «FilingDate»).Value
ObjWorkSheet.Cells(i, 8).Value = dr.Cells( «InsDate»).Value
ObjWorkSheet.Rows(i).font.size = 8
i += 1
Next
ObjWorkSheet.PageSetup.Orientation = Microsoft.Office.Interop.Excel.XlPageOrientation.xlLandscape ‘ изменяем ориентацию листа
ObjWorkSheet.PrintOut() ‘ выводим на печать
ObjExcel.Quit() ‘ закрываем приложение
ObjWorkSheet = Nothing
ObjWorkBook = Nothing
ObjExcel = Nothing
GC.Collect() ‘ вызываем сборщик мусора
End Sub

Вот вообщем то и всё. О чем надо знать — нумерация строк и колонок начинается с единицы. Отсюда вытекает одна из самых распространенных ошибок — при обращении к первой ячейке (левой-верхняя) программисты используют адрес (0, 0) вместо (1, 1). Стоит также обратить внимание на свойство Range объекта Worksheet — он позволяет получить доступ к набору ячеек. В качестве такого набора может быть одна ячейка, целая строка, ряд или даже таблица ячеек, заданная прямоугольником. Это бывает удобно при заполнении. Из примера так же видно, что можно программно задать расположение листа на странице. Более полный перечень настроек можно получить, обратившись к свойству PageSetup объекта Worksheet. Ну и последнее, о чем хотелось бы сказать — возможность предпросмотра, перед печатью. Для этого достаточно вызвать метод PrintPreview() того же объекта Worksheet.

Читать еще:  Excel vba for

Создание файла excel vb net

Answered by:

Question

I’m trying to open an Excel workbook from VB.Net. I’m using VS 2005. The procedure that is trying to open the file looks like this:

I begin the class with the statements:

Imports Excel = Microsoft.Office.Interop.Exel

When I call the procedure, I get «Incorrect Syntax Near ‘Microsoft’.» I have commented the entire procedure except for the first Dim statement:

«Dim xlsApp = New.Excel.Application»

but I still get the error. The project builds without error.

Can anyone suggest why I get this syntax error and how to correct it?

Retred Air Force

Answers

First place the import statements at the top of the form or code module you are working in

Code to open Excel (read the MessageBox within the code)

Please remember to mark the replies as answers if they help and unmark them if they provide no help, this will help others who are looking for solutions to the same or similar problem.

  • Proposed as answer by Ed Price — MSFT Microsoft employee, Owner Wednesday, May 22, 2013 6:12 AM
  • Marked as answer by Youen Zen Moderator Wednesday, June 5, 2013 6:18 AM

Just an FYI, since you mentioned that you are working on an ASP.NET app:

You may also want to try posting to one of the ASP.NET forums for assistance:

Microsoft MVP (Visual Basic)

  • Edited by Paul P Clement IV Tuesday, May 21, 2013 4:59 PM
  • Proposed as answer by Ed Price — MSFT Microsoft employee, Owner Wednesday, May 22, 2013 6:12 AM
  • Marked as answer by Youen Zen Moderator Wednesday, June 5, 2013 6:18 AM

All replies

That seems like an error in a macro that is starting when Excel loads. I would look at your Excel setup rather than within VB.

You should not be using Try/Catch while you are still debugging — you want to see what your errors are so that you can resolve them. Leave the Try/Catch in only if there is a particular error that you cannot handle otherwise.

First place the import statements at the top of the form or code module you are working in

Code to open Excel (read the MessageBox within the code)

Please remember to mark the replies as answers if they help and unmark them if they provide no help, this will help others who are looking for solutions to the same or similar problem.

  • Proposed as answer by Ed Price — MSFT Microsoft employee, Owner Wednesday, May 22, 2013 6:12 AM
  • Marked as answer by Youen Zen Moderator Wednesday, June 5, 2013 6:18 AM

Thanks for the response and well written example. Based on your advice, I opted to start out slowly by first adding the following:

at the beginning of the page with my other Imports statements (actually already there). I then created a new procedure with only 2 lines of your code in it:

Как на VBA сохранить файл Excel с названием, взятым из ячейки?

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

Читать еще:  Vba excel классы

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

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

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

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

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

Сохранение файла Excel с названием из ячейки — с привязкой к этой ячейке

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

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

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

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

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

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

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

В результате в моем случае процедура успешно выполнилась, файл сохранился с названием «Марка Авто 1», данное значение взято из ячейки B14, о чем будет свидетельствовать сообщение в конце процедуры. Файл сохранен в каталоге, где и исходный файл (во всех примерах ниже прописано то же самое, т.е. сохранение рядом с исходником, но это Вы можете изменить).

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

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

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

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

Сохранение файла Excel с названием из ячейки — без привязки к ячейке

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

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

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

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

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

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

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

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

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

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

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

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

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

У меня на этом все, надеюсь, материал был Вам полезен, пока!

Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector
×
×