Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.20;
Скачать: CL | DM;

Вниз

Экспорт содержимого DBGrid в Excel   Найти похожие ветки 

 
evgen   (2004-05-27 09:33) [0]

Привет! Мастера! Есть такой код, который сохроняет содержимое DBgrid в Excel файл! Проблема в том что сохраняется только одна строка БД размноженная несколько раз! А нужно сохронять все записи! Может кто поможет!

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, DB, DBTables, Grids, DBGrids, StdCtrls, ComObj, OleServer,
 ExcelXP;

type

 TMyDBGrid = class(TDBGrid);
 TForm1 = class(TForm)
 DataSource1: TDataSource;
 DBGrid1: TDBGrid;
   Button1: TButton;
   Query1: TQuery;
   ExcelApplication1: TExcelApplication;
   SaveDialog1: TSaveDialog;
 procedure ToExcel;
   procedure Button1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
private
 { Private declarations }
public
 { Public declarations }
end;

var
 Form1: TForm1;

implementation

{$R *.dfm}
procedure tform1.ToExcel;
var
a,b: Integer;
ExApp, WB, WS: Variant;
begin
ExApp:=CreateOleObject("Excel.Application");
WB:=ExApp.WorkBooks.Add;
WS := ExApp.Workbooks[1].WorkSheets[1];
with TMyDBGrid(DBGrid1).DataLink do
begin
 for a:=0 to (RecordCount-1) do
 begin
   for b:=0 to (FieldCount-1) do
   begin
     WS.Cells[a+1, b+1].Value:=Fields[b].AsString;
   end;
 end;
 ExApp.Visible:=true;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
a,b: Integer;
ExApp, WB, WS: Variant;
begin
if SaveDialog1.Execute then
begin
ExApp:=CreateOleObject("Excel.Application");

WB:=ExApp.WorkBooks.Add;
//   XLap.visible := true;
  WS := ExApp.Workbooks[1].WorkSheets[1];
//  WS.Cells[1,1].Value:=form1.DBGrid1.Fields[1].AsString;
 with TMyDBGrid(DBGrid1).DataLink do
begin

 for a:=0 to (RecordCount-1) do
 begin
   for b:=0 to (FieldCount-1) do
   begin
      WS.Cells[a+1, b+1].Value:=Fields[b].AsString;
   end;
 end;
 exapp.ActiveWorkbook.SaveAs(SaveDialog1.FileName);
 exapp.quit;
 end;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin

end;

end.


 
Курдль ©   (2004-05-27 09:35) [1]

А с датасэтом поработать не пробовали?


 
DenK_vrtz ©   (2004-05-27 09:37) [2]

тебе здесь http://delphimaster.net/view/3-1084788202/ все сделали


 
evgen   (2004-05-27 09:38) [3]

> Курдль ©   (27.05.04 09:35) [1]
> А с датасэтом поработать не пробовали?

А что там можно сделать? Поясните по подробнее!


 
evgen   (2004-05-27 09:44) [4]

> DenK_vrtz ©   (27.05.04 09:37) [2]
> тебе здесь http://delphimaster.net/view/3-1084788202/
> все сделали

Нет, не все! Я использую этот самый код, но у меня сохроняеться только одна строка! Надо что бы все сохранялись! Значит что то не так!?


 
Курдль ©   (2004-05-27 10:04) [5]

Значица так. Покупаешь вместо DBGrid dxDBGrid и делаешь ему
dxDBGrid1.SaveToXLS(FileName, True);


 
DenK_vrtz ©   (2004-05-27 10:08) [6]

>Нет, не все!
>Значит что то не так!?

(Сцена "Двое из ларца одинаковых с лица")

-Так вы, что и есть за меня будите?
-АГА

(с) "Вовка в тридесятом(или тридевятом) царстве"

:)


 
evgen   (2004-05-27 10:08) [7]

Дагадываюсь я что можно проще, с таким раскладом я лучше знающего человека попрошу! Что с DBGrid не как не льзя? Или все профи к вечеру бывают?


 
Ega23 ©   (2004-05-27 10:08) [8]

По датасету надо идти. И Next не забывать делать.

with TMyDBGrid(DBGrid1).DataSource.DataSet do
begin

First;
While not Eof do
begin
  for b:=0 to (FieldCount-1) do
  begin
     WS.Cells[a+1, b+1].Value:=Fields[b].AsString;
  end;
 Next;
end;
exapp.ActiveWorkbook.SaveAs(SaveDialog1.FileName);
exapp.quit;
end;
end;


 
Курдль ©   (2004-05-27 10:10) [9]

Да льзя! Только за деньги! Вы уже утомили - читайте книги, или платите программистам!


 
Ega23 ©   (2004-05-27 10:10) [10]

Ну и конечно "а" не забывать инкриментировать. :о)


 
Vlad ©   (2004-05-27 10:14) [11]


> evgen   (27.05.04 09:44) [4]

Слушай, тебе сколько раз говорить можно, ЭКСПОРТ НЕ ИЗ DBGRID А ИЗ DATASET !
Я тебе специально в той ветке привел пример, который делает экспорт именно из DBGrid, а не из DataSet, чтобы ты почувствовал разницу, и понял что это РАЗНЫЕ ВЕЩИ. Но ты упорно не хочешь ничего понимать.
ЧИТАЙ ВНИМАТЕЛЬНО вот эту ветку
http://delphimaster.net/view/3-1084788202/
и прекрати задавать глупые вопросы


 
DenK_vrtz ©   (2004-05-27 10:14) [12]

Курдль ©   (27.05.04 10:10) [9]

Поддерживаю!
Все что нужно автору вопроса было дано(ссылки на статьи+примеры).


 
YurikGl ©   (2004-05-27 10:36) [13]

Что-то типа

ADODataSetVPERI:AdoDataSet
E1:TExcelApplication

   E1.Connect;
   E1.Visible[0]:=true;
   E1.Workbooks.Add(Null,1);

   l:=1;
   e1.Range["A"+IntToStr(l),"A"+IntToStr(l)].ColumnWidth:=18;
   e1.Range["B"+IntToStr(l),"B"+IntToStr(l)].ColumnWidth:=20;
   e1.Range["C"+IntToStr(l),"C"+IntToStr(l)].ColumnWidth:=25;
   e1.Range["D"+IntToStr(l),"D"+IntToStr(l)].ColumnWidth:=10;
   e1.Range["E"+IntToStr(l),"E"+IntToStr(l)].ColumnWidth:=21;

     E1.Range["A"+IntToStr(l),"A"+IntToStr(l)].formula:=Заглавие таблицы;
     E1.Range["A"+IntToStr(l),"A"+IntToStr(l)].Select;
     E1.Range["A"+IntToStr(l),"A"+IntToStr(l)].Font.Size:=12;
     E1.Range["A"+IntToStr(l),"A"+IntToStr(l)].Font.Bold:=true;

     E1.Range["A"+IntToStr(l),"E"+IntToStr(l)].Merge(EmptyParam);
     E1.Range["A"+IntToStr(l),"A"+IntToStr(l)].HorizontalAlignment:=xlCenter;
     inc(l);

     ADODataSetVPERI.First;
     E1.Range["A"+IntToStr(l),"A"+IntToStr(l)].formula:="НАзвание 1-го столбца";
     E1.Range["B"+IntToStr(l),"B"+IntToStr(l)].formula:="НАзвание 2-го столбца";
     E1.Range["C"+IntToStr(l),"C"+IntToStr(l)].formula:="НАзвание 3-го столбца";
     E1.Range["D"+IntToStr(l),"D"+IntToStr(l)].formula:="НАзвание 4-го столбца";
     E1.Range["E"+IntToStr(l),"E"+IntToStr(l)].formula:="НАзвание 5-го столбца";
     inc(l);

     o:=l;

     if ADODataSetVPERI.RecordCount>0 then begin
     Repeat
       if ADODataSetVPERI.Fields[6].value=sb then begin

       if ADODataSetVPERI.Fields[3].value<>null then
            E1.Range["A"+IntToStr(l),"A"+IntToStr(l)].formula:=ADODataSetVPERI.Fields[3].value;
       if ADODataSetVPERI.Fields[2].value<>null then
            E1.Range["B"+IntToStr(l),"B"+IntToStr(l)].formula:=ADODataSetVPERI.Fields[2].value;
       if ADODataSetVPERI.Fields[4].value<>null then
            E1.Range["C"+IntToStr(l),"C"+IntToStr(l)].formula:=ADODataSetVPERI.Fields[4].value;
       if ADODataSetVPERI.Fields[1].value<>null then
            E1.Range["D"+IntToStr(l),"D"+IntToStr(l)].formula:=ADODataSetVPERI.Fields[1].value;
       if ADODataSetVPERI.Fields[5].value<>null then
            E1.Range["E"+IntToStr(l),"E"+IntToStr(l)].formula:=ADODataSetVPERI.Fields[5].value;
       inc(l)

                                              end;
       ADODataSetVPERI.Next;
     until ADODataSetVPERI.Eof;
                               end;


 
Соловьев ©   (2004-05-27 10:40) [14]

Ничего покупать не надо , если лень можно скачать ЕхЛиб. Там во много форматов експорт - rtf, txt, xls ...


 
Ega23 ©   (2004-05-27 10:49) [15]

YurikGl ©   (27.05.04 10:36) [13]

Перед Repeat ADODataSetVPERI.First поставить надо. А то вдруг ты его уже двигал?


 
YurikGl ©   (2004-05-27 10:50) [16]


>      E1.Range["A"+IntToStr(l),"A"+IntToStr(l)].HorizontalAlignment:=xlCenter;
>      inc(l);
>
>      ADODataSetVPERI.First;


 
Ega23 ©   (2004-05-27 10:56) [17]

YurikGl ©   (27.05.04 10:50) [16]
Виноват. Не заметил. :о)


 
YurikGl ©   (2004-05-27 11:03) [18]

Ega23 ©   (27.05.04 10:56) [17]
Значит, не я один сегодня косячу :)
http://delphimaster.net/view/3-1084788202/



Страницы: 1 вся ветка

Текущий архив: 2004.06.20;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.026 c
3-1085732139
KADAN
2004-05-28 12:15
2004.06.20
PASSWORD() в MSSQL?


1-1086675201
ancara
2004-06-08 10:13
2004.06.20
ошибка Integer overflow


1-1086448251
Kostya
2004-06-05 19:10
2004.06.20
Progress Bar


1-1086586867
ra4fcr
2004-06-07 09:41
2004.06.20
Формула в Excel


1-1086524949
Дас Виндовс 45
2004-06-06 16:29
2004.06.20
Сортировка