Текущий архив: 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.56 MB
Время: 0.091 c