Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Export в Exel из разных форм программы


Автор: DenRip 20.6.2007, 19:11
Пишу программу, не знаю сколко я буду её писать, месяц или год.......
Программка не сложная.
В конечном итоге вся инфа которая накопится в программке будет переноситься в ексель, но переносить в Exel я ещё не умею.
Научится я думаю будет не сложно.
Когда программа будет готова, боюсь столкунутся с какими ни будь проблемами экспорта.
Типа: (Эх!!! Блин!! не так надо было делать, а вот как......) и давай все переделывать...........

Нужен Вашь совет:
1.  Из Каких  компонентов легче производить экспорт?
2.  Из каких компонентов вообще нельзя экспортнуть в эксель?
3.  У меня много  форм, около 60ти может стоить всю информацию  предварительно собрать гдето в одном месте, а потом экспортнут в Ексель??
Вот так.....
Экспорт будет производится из комбобоксов, едитов, мемо, лэйблов и тд.
Так же имеется несколько таблиц  Access......

Автор: Данкинг 20.6.2007, 19:22
Вообще, на эту тему множество раз писали, да и в ДРКБ тоже есть. Ну вот, одна из моих процедур отчёта из Access (ADO1) в Excel. 
Код

procedure TForm1.report1;
var row,jj,j,y1,y2:integer;
d1:tdate;
begin
ex:=createoleobject('excel.application');
ex.visible:=false;
ex.workbooks.add;
try
Ex.ActiveSheet.PageSetup.Orientation := xlLandscape;
Ex.ActiveSheet.PageSetup.topmargin:=0;
Ex.ActiveSheet.PageSetup.bottommargin:=0;
Ex.ActiveSheet.PageSetup.leftmargin:=0;
Ex.ActiveSheet.PageSetup.rightmargin:=0;
except
end;

ex.activeworkbook.activesheet.Rows[1].Font.Bold := True;
ex.activeworkbook.activesheet.Range['A1:H1'].Merge;
ex.activeworkbook.activesheet.Rows[1].Font.Bold := True;
ex.activeworkbook.activesheet.Rows[1].Font.Size := 14;
ex.activeworkbook.activesheet.cells.item[1,1]:='Отчёт с '+datetostr(dates.Date)+' по '+datetostr(datepo.Date);
ex.activeworkbook.activesheet.cells.item[2,1]:='ФИО/Дата';
ex.activeworkbook.activesheet.cells.item[2,1].ColumnWidth := 20;
ex.activeworkbook.activesheet.Cells[2,1].WrapText:=true;
j:=2;
d1:=dates.Date;
ex.activeworkbook.activesheet.Rows[2].Font.Bold := True;
ex.activeworkbook.activesheet.Cells[2,1].Borders.lineStyle := 1;
while d1<=datepo.Date do
begin
ex.activeworkbook.activesheet.cells.item[2,j].NumberFormat:='@';
ex.activeworkbook.activesheet.cells.item[2,j]:=datetostr(d1);
ex.activeworkbook.activesheet.cells.item[2,j].ColumnWidth := 3;
ex.activeworkbook.activesheet.Cells[2,j].Orientation := 90;
if (dayofweek(d1)=7) or (dayofweek(d1)=1) then ex.activeworkbook.activesheet.cells.item[2,j].interior.color:=clsilver;
d1:=d1+1;
inc(j);
tt:=j;
end;
ex.activeworkbook.activesheet.cells.item[2,tt].ColumnWidth := 3;
ex.activeworkbook.activesheet.Cells[2,tt].Orientation := 90;
ex.activeworkbook.activesheet.cells.item[2,tt]:='Всего';
ex.activeworkbook.activesheet.cells.item[2,tt].interior.color:=clGray;
row:=3;
gauge.MaxValue:=ado1.RecordCount;
gauge.Visible:=true;
application.ProcessMessages;
ado1.First;
for i:=1 to ado1.RecordCount do
 begin
 ex.activeworkbook.activesheet.Cells.item[row,1]:=ado1.FieldValues ['fullname'];
 gauge.Value:=i;
 application.ProcessMessages;
 zapros.Close;
 zapros.SQL.Clear;
 zapros.SQL.Add('select * from grafik where user="'+ado1.FieldValues ['user']+'"');
 zapros.Open;
 zapros.First;
 tot:=0;
 for jj:=1 to zapros.RecordCount do
  begin
   for j:=2 to ex.ActiveSheet.UsedRange.columns.Count do
    begin
     if vartostr(ex.activeworkbook.activesheet.Cells[2,j])=zapros.FieldValues ['day'] then
      begin
      ex.activeworkbook.activesheet.cells.item[row,j].NumberFormat:='@';
      ex.activeworkbook.activesheet.cells[row,j].Font.Size:=8;
      ex.activeworkbook.activesheet.Cells.item[row,j]:=zapros.FieldValues ['time']+' '+zapros.FieldValues ['komment'];
      if length(zapros.FieldValues ['komment'])<> 0 then ex.activeworkbook.activesheet.Cells[row,j].Orientation := 90;
      try
      TOT:=tot+strtofloat(zapros.FieldValues ['time']);
      except
      end;
      end;
     end;
  zapros.Next;
  end;
ex.activeworkbook.activesheet.cells[row,tt].Font.Size:=8;
ex.activeworkbook.activesheet.cells.item[row,tt].NumberFormat:='@';
ex.activeworkbook.activesheet.Cells.item[row,tt]:=vartostr(tot);
ex.activeworkbook.activesheet.cells.item[row,tt].interior.color:=clGray;
inc(row);
ado1.Next;
end;



Вопросов же по поводу компонентов не понял... smile 


Автор: DenRip 20.6.2007, 20:51
Цитата

Вопросов же по поводу компонентов не понял...


Кину на форму компонент едит, напишу в нём не приличное слово, нажму кнопочку, что бы в ексель экспортнуть и ни чего не выйдет,
А потом окажется что надо было не едит использовать а мемо!
Я вот к чему.......
За кодик спасибо, очень пригодится, будем учиться........

Автор: Данкинг 20.6.2007, 22:08
Цитата(DenRip @ 20.6.2007,  21:51)
Кину на форму компонент едит, напишу в нём не приличное слово, нажму кнопочку, что бы в ексель экспортнуть и ни чего не выйдет,
А потом окажется что надо было не едит использовать а мемо!

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

Автор: DenRip 20.6.2007, 22:37
Цитата

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

Это радует........

Автор: FireWORD 21.6.2007, 22:20
DenRip, в ячейки EXCEL можно экспортировать что угодно, хоть Float хоть String 
Код

Excel.ActiveSheet.Cells.Item[integer,integer].value:='Вот сюда можешь писать что угодно и откуда угодно';

Посмотри в примере предложенном Данкинг-ом, там есть все что надо smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)