В общем есть некий запрос ADOQuery1 Которые выводит в DbGrid1 следующие столбцы из БД:
Код заказа
Наименование
Количество
Примечание
Мне нужно сделать так, чтобы при нажатии на кнопку Button1 результат этого запроса выводился в Ecxel при этом каждый раз в новый файл.
Как мне это сделать? Желательно какой-нибудь пример кода с моими данными. .
Вот мой код запроса:
var
Form7: TForm7;
kod_z: integer;
implementation
uses Unit4, Unit6, Unit5;
<$R *.dfm>
//Это процедура нажатия кнопки для формирования запроса
procedure TForm7.Button1Click(Sender: TObject);
begin
//Это из файла в котором лежит номер заказа подгружается в memo1 на другой форме
Form5.Memo1.Lines.LoadFromFile(‘zakaz.asd’);
//Этот код заказа присваивается переменной
kod_z:=StrToInt(Form5.Memo1.Lines[0]);
//DbGr >with ADOQuery1 do begin
Close;
SQL.Clear;
SQL.Add(‘SELECT zakaz.[Код заказа] , zakaz.Наименование, zakaz.Количество, zakaz.Примечание FROM zakaz’);
//Это условие которое обеспечивает вывод именно тех записей, которые имеют код заказа равный моей переменной
SQL.Add(‘WHERE zakaz.[Код заказа] = «‘+IntToStr(kod_z)+'»‘);
Open;
end;
ADOQuery1.Active:=true;
end;
COM – Component Object Model – модель многокомпонентных объектов – одна из базовых технологий Windows. Цель ее – обеспечение возможности экспорта объектов. Идея экспорта объектов заключается в том, что один модуль создает объект, а другой его использует посредством обращения к методам или сервисам.
В общем случае программа должна выполнять следующие действия:
1. Проверить, запущена ли копия приложения
2. В зависимости от результатов, запустить приложение или подключиться к запущенному.
3. Если нужно, сделать окно приложения видимым.
4. Выполнить какие-то действия с приложением.
5. Закрыть приложение, если мы его открыли, или отключиться, если подключились.
1.В uses включить модули ComObj и ActiveX
2.Объявим переменные.
var
Form1: TForm1;
WApp, XLApp, Sheet, Colum : Variant;
ExIsRunning :boolean;
AppExId : string;
Unknown : IUnknown;
Вход
procedure TForm1.ToExcelButtonClick(Sender: TObject);
var
Result : HResult;
begin
AppEx ;
ExIsRunning := False;
Result:= GetActiveObject(ProgIdToClassId(AppExId),nil,Unknown);
if Result = MK_E_UNAVAILABLE then
XLApp := CreateOleObject(AppExId) // Создаем
else begin // Подсоединяемся
XLApp := GetActiveOleObject(AppExId);
ExIsRunning := True;
end;
XLApp.Visible := True;
procedure TForm1.OutExcelButtonClick(Sender: TObject);
begin
if not ExIsRunning then XLApp.Quit;
XLApp := UnAssigned;
end;
Создание рабочих книг
procedure TForm1.NewExcelDocButtonClick(Sender: TObject);
var
Index : integer;
begin
XLApp.WorkBooks.Add;
//XLApp.WorkBooks.Add(‘C:Program FilesMicrosoft OfficeTemplates1049Авансовый отчет. xlt’); // Из шаблона
//XLApp.WorkBooks.Add(xlWBATWorksheet); // Рабочая книга состоит из листа с данными
//XLApp.WorkBooks.Add(xlWBATChart); // Рабочая книга состоит из листа с диаграммой
и открытие
procedure TForm1.OpenExcelDocButtonClick(Sender: TObject);
begin
XLApp.Workbooks.Open(‘D:30 GbЛист1.xls’);
end;
Св-во ActiveWorkBook объекта Excel.Application указывает на активную рабочую книгу среди открытых. Кроме этого к рабочей книге можно обращаться по ее порядковому номеру. XLApp.WorkBooks[1]
Сделать книгу активной можно так: XLApp.WorkBooks[1].Activate;
Сохранение, печать и закрытие рабочих книг
XLApp.WorkBooks[1].Close;
XLApp. ActiveWorkBook.Close(True,’C:a1.xls’); Нужно ли сохранять и куда
XLApp. ActiveWorkBook.Save
XLApp. ActiveWorkBook.SaveAs(’C:a1.xls’);
XLApp.DisplayAlerts:= False; Подавление вывода диагностических сообщений
Обращение к листам и ячейкам
Обращение к листам производится с помощью коллекции WorkSheets объекта WorkBook.
WorkSheets[1]
XLApp. ActiveWorkBook WorkSheets[‘Sheet1’].Name := ‘Страница 1’;
Связь с администрацией сайта:
Среди толпы я одинок
- Вы здесь:
- Home >
- Блог >
- Программирование >
- Статьи >
- Delphi 7 Вывод данных в MS Excel
Delphi 7 Вывод данных в MS Excel
- Written by Administrator
- Tagged under Delphi 7MS ExcelВывод отчетов в Excel из Delphi
Помните, что для каждой формы, где будет вывод данных в MS Excel , необходимо проделывать все эти действия.
Заметим, что TF_MAin – это мой идентификатор формы. У вас этот параметр будет отличаться. Его можно посмотреть в «interface»->«type» первой строкой TF_MAin = class(TForm).
Видимо любители экономить килобайты оперативной памяти могут меня закидать помидорами или ещё чем по-хуже, но все-таки я скажу, что интеграция приложений (мегабайты оперативы) — это большой плюс нынешней разработки приложений.
Как ни крути, а время DOS и килобайтов оперативной памяти прошло. Вряд ли кто-то всерьез сейчас задумывается над тем куда это с винчестера пропал мегабайт? Да и использование в своих приложениях функциональности программ, которых ты не писал, но которые выполняют что-то лучше — это всё-таки больший прогресс, нежели корпеть год-два над программой, а потом узнать, что время-то прошло.
План статьи:
Итак, цель сегодняшней статьи — поделиться с Вами опытом работы с Microsoft Excel в приложениях, написанных на Delphi.
Вспомнился сейчас один случай. Когда я только начинал работать по своей специальности, пригласили меня написать программу-расчётник для экологов нашего нефтезавода. В принципе ничего серьёзного — программа считает выброс от нагревательной печи и выдает табличку результатов, которую необходимо распечатать и уложить в толстую папку с отчётами. Естественно, что в области разработки подобных приложения я далеко не пионер, поэтому дали взглянуть на аналог будущей программы, который работал ещё под DOS и печатались отчёты на дико скрипящем матричном принтере с 12-ю иголками. Ну посмотрел, элементарная таблица, расчёт немного запутан, но жить можно — начал по-тихоньку писать. И попалась мне тогда на глаза статейка про работу с Excel в Delphi. Вот я и решил попробовать выдавать отчёт не только на форму приложения, а ещё и скидывать весь ход расчёта с формулами и прочим делом в Excel…Надо сказать более сильно детской радости начальника отдела я не видел до сих пор :). Люди, всю жизнь проработавшие в DOS увидели как тот же самый расчёт может выглядеть в современных условиях. Вот теперь при определении технических заданий на каждую новую программу, обязательно присутствует пункт, гласящий, что программа должна передавать данные либо в MS Word либо в MS Excel.Соответственно и цена на разработку возрастает, иногда значительно.
Отсюда можно сделать простой и однозначный вывод — заказчики готовы пожертвовать лишними деньгами только для того, чтобы всё в программе было красиво. Excel может дать вашему приложению ту самую красоту и удобство.
Ну, а для того, чтобы каждый раз не утруждать себя выполнением однотипных операций, я разработал небольшой модуль для работы с Excel. Этот же модуль я в настоящее время дорабатываю под ещё одну задачу, но об этом после. Сегодня основы основ работы с Excel в Delphi.
1. Как проверить установлен ли Excel на компьютере пользователя?
Создаем новый модуль (unit) и подключаем в uses следующие модули: