Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2009, 06:08   #1
Hobbit_88
Пользователь
 
Аватар для Hobbit_88
 
Регистрация: 08.04.2009
Сообщений: 41
По умолчанию Экспорт в Excel

Значит имеется база Acsess соединение ado. Нужно экспортировать данные в excel уже имеется документ с шапкой в него помещает результат запроса. вот код procedure TForm5.SpeedButton3Click(Sender: TObject);
var
ExcelApp : variant;
row :integer;
col:integer;
begin
dbgrid1.DataSource.DataSet.First;
ExcelApp:=CreateOleObject('Excel.Ap plication');
ExcelApp.workbooks.open(ExtractFile Path(ParamStr(0))+'OtchetPokyp.xls' );
ExcelApp.Visible := true;
ExcelApp.WorkBooks[1].WorkSheets[1].Name := 'Отчет1';
for row :=0 to DBGrid1.DataSource.DataSet.RecordCo unt-1 do
begin
for col :=0 to DBGrid1.Columns.Count-1 do
begin
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+7,col+2].value:=dbgrid1.DataSource.DataSet. Fields[col].AsString;
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+7,1]:=row+1;
end;
DBGrid1.DataSource.DataSet.Next;
ExcelApp.Range[excelapp.cells[7,1],excelapp.cells[7+DBGrid1.DataSource.DataSet.Record Count-1,9]].select;
ExcelApp.Selection.Borders.LineStyl e:= xlContinuous;
end;
end;

Как сделать если неизвестно количество строк. Добавить программно вниз документа место для подписи и печати.
Hobbit_88 вне форума Ответить с цитированием
Старый 24.04.2009, 08:15   #2
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Как вариант вставить необходимое количество пустых строк между "шапкой" и "подвалом".
Код:
  Rng := ExcelApp.WorkBooks[1].WorkSheets[1].Cells[Row+8, 1];
  Rng.Select;
  for row := 0 to DBGrid1.DataSource.DataSet.RecordCount-1 do
    ExcelApp.Selection.EntireRow.Insert;

for row :=0 to DBGrid1.DataSource.DataSet.RecordCount-1 do
begin
...
Rng : Variant;
Скандербег вне форума Ответить с цитированием
Старый 24.04.2009, 08:17   #3
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

Цитата:
Сообщение от Hobbit_88 Посмотреть сообщение
Как сделать если неизвестно количество строк. Добавить программно вниз документа место для подписи и печати.
В ваших значениях col,row уже стоит последняя ячейка записи, надо немного переделать
Код:
TForm5.SpeedButton3Click(Sender: TObject);
var
ExcelApp : variant;
row :integer;
col:integer;
begin
dbgrid1.DataSource.DataSet.First;
ExcelApp:=CreateOleObject('Excel.Application');
ExcelApp.workbooks.open(ExtractFilePath(ParamStr(0))+'OtchetPokyp.xls');
ExcelApp.Visible := true;
ExcelApp.WorkBooks[1].WorkSheets[1].Name := 'Отчет1';
for row :=0 to DBGrid1.DataSource.DataSet.RecordCount-1 do
begin
for col :=0 to DBGrid1.Columns.Count-1 do
begin
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+7,col+2].value:=dbgrid1.DataSource.DataSet.Fields[col].AsString;
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+7,1]:=row+1;
end;
DBGrid1.DataSource.DataSet.Next;

end;
ExcelApp.WorkBooks[1].WorkSheets[1].cells[1,row+10].value:='Подпись'
end;
S@fer вне форума Ответить с цитированием
Старый 24.04.2009, 08:52   #4
Hobbit_88
Пользователь
 
Аватар для Hobbit_88
 
Регистрация: 08.04.2009
Сообщений: 41
По умолчанию

S@fer в вашем коде подпись вставляется в определенную ячейку, а я не знаю какое количество строк у меня будет после запроса и которые нужно экспортировать в excel. Если их будет больше чем на которой стоит подпись то они наложатся, и не будет видно подписи.
Hobbit_88 вне форума Ответить с цитированием
Старый 24.04.2009, 09:12   #5
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

Вы же вставляете записи через цикл
Цитата:
for row :=0 to DBGrid1.DataSource.DataSet.RecordCo unt-1 do
begin
for col :=0 to DBGrid1.Columns.Count-1 do
begin
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+7,col+2].value:=dbgrid1.DataSource.DataSet. Fields[col].AsString;
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+7,1]:=row+1;
end;end;
Допустим объявите еще одну переменную , которой в теле цикла будете считать количество строк, а затем уже брать значение этой переменной.
S@fer вне форума Ответить с цитированием
Старый 24.04.2009, 10:15   #6
Hobbit_88
Пользователь
 
Аватар для Hobbit_88
 
Регистрация: 08.04.2009
Сообщений: 41
По умолчанию

Все спасибо разобрался
Hobbit_88 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Экспорт из StringGrid в MS Office Excel Kamikadze_666 Общие вопросы C/C++ 0 26.03.2009 08:53
экспорт из Excel в БД Tanuska___:) БД в Delphi 7 27.08.2008 15:31
Экспорт из Access в Excel, Экспорт из отчётов в таблицу Excel Kissedbythegod Microsoft Office Access 1 31.05.2008 22:15
Экспорт из Excel Nemo333 БД в Delphi 3 04.04.2007 15:53
Экспорт из Delphi в Excel micaell Общие вопросы Delphi 0 14.12.2006 01:24