Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.06.20;
Скачать: [xml.tar.bz2];

Вниз

Экспорт содержимого 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.031 c
3-1085499788
GanibalLector
2004-05-25 19:43
2004.06.20
дата в IB


1-1085999039
Александр
2004-05-31 14:23
2004.06.20
Тренер


1-1086297558
Deep_NEW
2004-06-04 01:19
2004.06.20
Про RichEdit.....


14-1086262861
Li_
2004-06-03 15:41
2004.06.20
как сделать Дельфи-сайт ?


14-1085999853
BiN
2004-05-31 14:37
2004.06.20
А я вот скоро женюсь :). Помогите с подготовкой к свадьбе.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский