powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Отчеты в екселе
7 сообщений из 7, страница 1 из 1
Отчеты в екселе
    #32044746
lorien
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, может кто знает, как сделать так: данные формируются в программе, а вид отчета нарисован в екселе, при нажатии кнопки в программе открывается отчет из екселя, в котором данные из программы. Честно говоря, сама не совсем поняла, что сказала. И какие существуют компоненты для отчетов в экселе из делфи5. За раннее благодарна
...
Рейтинг: 0 / 0
Отчеты в екселе
    #32044747
lorien
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ссылка внизу нерабочая, а Афалина шаривари
...
Рейтинг: 0 / 0
Отчеты в екселе
    #32044748
lorien
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пардон, разабралась
...
Рейтинг: 0 / 0
Отчеты в екселе
    #32044761
Dimos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Excel можно использовать как Automation Server,
т.е. вы можете управлять приложением Excel из Delphi, причем точно так же как это бы делалось из самого Excel на VBA.

Почитайте литературу и посмотрите примеры по OLE Automation
...
Рейтинг: 0 / 0
Отчеты в екселе
    #32044836
Фотография Tаrantino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно можно использовать Excel как Automation Server, можно ещё написать VBScript который формирует отчёт, но это достаточно геморройно.

А вот продукт от Афалины т.е. XL REPORT весьма приятная штука, правда бесплатный без исходников, а за исходники платить надо!
...
Рейтинг: 0 / 0
Отчеты в екселе
    #32045395
Фотография matveev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я делаю это так:

Private
Excel, Sheet: variant

Проверяем не запущен ли Excel
++++++++++++++++++++++++++++++
function Tmtrglav.ExistExcel(FileNameXLS: string):Variant;
var
VarExcel: variant;
iWb, CountWb: Integer;
begin
try
try
VarExcel:=GetActiveOleObject('Excel.Application');
CountWb:=VarExcel.Workbooks.Count;
for iWb:=1 to CountWb do begin
if VarExcel.Workbooks[iWb].Name=FileNameXLS then begin
VarExcel.Worcbooks[iWb].Close;
repeat
until VarExcel.Workbooks.Count<CountWb;
CountWb:=VarExcel.Workbooks.Count;
end{if};
end{for};
Result:=VarExcel;
except
Result:=CreateOleObject('Excel.Application');
end{try};
except
MessageDlg('На компьютере отсутствует Microsoft Excel.',mtError,[mbOk],0);
Result:=null;
end{try}
end{func};

++++++++++++++Вызов

NewFileOt:=ExtractFilePath(Application.ExeName) +'XLS\'+'my.xls';

Excel:=ExistExcel(NewFileOt);
if VarIsNull(Excel) then exit;
Excel.visible:=true;
Excel.Workbooks.Open(NewFileOt);
Sheet:=Excel.Sheets;

Ну а дальше примерно так:

ADOQuery1.First;
while not ADOQuery1.Eof do
begin
Sheet.Cells[Row,1] := FieldByName('cod').AsInteger;
Sheet.Cells[Row,2] := FieldByName('тфьу').AsString;
ADOQuery1.Next

end;
ну и т.д.
...
Рейтинг: 0 / 0
Отчеты в екселе
    #32045404
Фотография Tаrantino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2matveev:
Ты кстати очень не грамотно делаешь присваи значения ячейкам таким способом:
Sheet.Cells[Row,1] := FieldByName('cod').AsInteger;
Sheet.Cells[Row,2] := FieldByName('тфьу').AsString;

Это самый медленный способ, конечно если мало данных то бог с ним, но набольших объёмах замедление будет большим, гораздо проще сделать так, т.е. бежишь по датасету и присваишь значения полей некоему двумерному массиву, а затем это массив присваишь диапазону (RANGE) твоего екселевского отчёта
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Отчеты в екселе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]