Cum să exportați conținutul programului dbgrid în Excel

Există o sursă în această problemă?

Aveți nevoie de o sursă care exportă conținut de la DBgrid la Excel


> evgen # xA0; (17/05/04 14:03) # xA0;

Aici, nu prea leneș pentru tine a scris un exemplu de cod:







tip
TMyDBGrid = clasa (TDBGrid);
.
procedura ToExcel;
var
# xA0; a, b: Integer;
# xA0; ExApp, WB, WS: varianta;
începe
# xA0; ExApp: = CreateOleObject ("Excel.Application");
# xA0; WB: = ExApp.WorkBooks.Add;
# xA0; WS: = lucrări ExApp.Workbooks [1] .File de lucru [1];
# xA0; cu TMyDBGrid (DBGrid1) .DataLink nu
# xA0; începeți
# xA0; # xA0; pentru a: = 0 până la (RecordCount-1) faceți
# xA0; # xA0; începeți
# xA0; # xA0; # xA0; pentru b: = 0 până la (FieldCount-1) faceți
# xA0; # xA0; # xA0; începeți
# xA0; # xA0; # xA0; # xA0; WS.Cells [a +1, b + 1]. Valoare: = Câmpuri [b] .AsString;
# xA0; # xA0; # xA0; sfârșitul;
# xA0; # xA0; sfârșitul;
# xA0; # xA0; ExApp.Visible: = adevărat;
# xA0; sfârșitul;
se încheie;

Aici, conținutul DBGrid este descărcat pe o foaie Excel
Dar ai nevoie de asta?

Mulțumesc. Acum uite!

Dă o eroare, se pare că lipsește ceva în formă:
[Error] Unit1.pas (32): Identificator nedeclarat: "CreateOleObject"
în linia:
ExApp: = CreateOleObject ("Excel.Application");


> evgen # xA0; (17.05.04 14:53) [8]

Scuze, frate, am uitat complet (vai de mine)
utilizează ComObj
:-)

Și asta este?
În linia:
cu TMyDBGrid (DBGrid1) .DataLink face
eroare:
[Error] Unit1.pas (36): Identificator nedeclarat: "TMyDBGrid"


> evgen # xA0; (17.05.04 15:10) [10]
> Și ce este asta?

Și asta înseamnă că în secțiunea de tip nu ați declarat tipul
TMyDBGrid = clasa (TDBGrid);
Citiți cu atenție mesajul [5]

# xA0; # xA0; TMyDBGrid = clasă (TDBGrid);

tip
# xA0; TMyDBGrid = clasa (TDBGrid);
# xA0; TForm1 = clasa (TForm)
# xA0; Tabelul 1: TTable;
# xA0; DataSource1: TDataSource;
# xA0; DBGrid1: TDBGrid;
# xA0; procedura ToExcel;
privat
# xA0;
public
# xA0;
se încheie;

Da, ca și mine!
unitate 1;

utilizări
# xA0; Windows, Mesaje, SysUtils, Variante, Clase, Grafică, Controale, Formulare,
# xA0; Dialoguri, Grile, DBGrids, DB, DBTables, ComObj;

tip
# xA0; TMyDBGrid = clasă (TDBGrid);
# xA0; TForm1 = clasa (TForm)
# xA0; Tabel1: TTable;
# xA0; DataSource1: TDataSource;
# xA0; DBGrid1: TDBGrid;
# xA0; procedura ToExcel;
# xA0; privat
# xA0; # xA0;
# xA0; public
# xA0; # xA0;
# xA0; sfârșitul;

var
# xA0; Form1: TForm1;

procedura ToExcel;
var
a, b: Integer;
ExApp, WB, WS: varianta;
începe
ExApp: = CreateOleObject ("Excel.Application");
WB: = ExApp.WorkBooks.Add;
WS: = lucrări ExApp.Workbooks [1] .File de lucru [1];
cu TMyDBGrid (DBGrid1) .DataLink face
începe
# xA0; pentru a: = 0 până la (RecordCount-1)
# xA0; începe
# xA0; # xA0; pentru b: = 0 până la (FieldCount-1)
# xA0; # xA0; începe
# xA0; # xA0; # xA0; WS.Cells [a + 1, b + 1]. Valoare: = Câmpuri [b] .AsString;
# xA0; # xA0; se încheie;
# xA0; se încheie;
# xA0; ExApp.Visible: = true;
se încheie;
se încheie;

> Vlad
În timp ce Cheto nu a funcționat. Mai târziu, vom continua! Mulțumesc!

Aceeași problemă ca evgen trebuie să exporte date de la Grida Excel.
Am incercat codul propus, dar ies doar o singura inregistrare (pe care se afla cursorul) din Grid ori de cate ori exista rinduri vizibile in Grid.
Poate cineva nu este leneș - ajută-mă să-mi dau seama.

cu DbGrid1.DataSource.DataSet face
începe
# xA0; Ultima;
# xA0;
se încheie;

> pentru a: = 0 până la (RecordCount-1)
> # xA0; începe
> # xA0; # xA0; pentru b: = 0 până la (FieldCount-1)
> # xA0; # xA0; începe
> # xA0; # xA0; # xA0; WS.Cells [a + 1, b + 1]. Valoare: = Câmpuri [b] .AsString;
> # xA0; # xA0; se încheie;
# xA0; # xA0; # xA0; DbGrid1.DataSource.DataSet.Next; # xA0;
> # xA0; se încheie;
> # xA0;
linia subliniată este calea corectă pentru frâne, deoarece ar trebui să vadă linkul de mai sus ..

> Am incercat codul sugerat, dar ies doar o singura inregistrare (pe
> care este cursorul) din Grilă ori de câte ori sunt vizibile
> rânduri din Grilă
vedeți completările mele la cod ..

Deci, cum se descarcă de la Grid în Excel fără urme?


> iVovs # xA0; (22.05.04 14:10) [17]

iartă-mă, eroarea a apărut,
.
cu TMyDBGrid (DBGrid1) .DataLink face
începe
# xA0; pentru a: = 0 până la (RecordCount-1) faceți






# xA0; începeți
# xA0; # xA0; ActiveRecord: = a; // Am uitat să adaug această linie
# xA0; # xA0; pentru b: = 0 până la (FieldCount-1) faceți
# xA0; # xA0; începeți
.


> Avem nevoie de export de la DBGrid și nu de la DataSet, conform declarației
> întrebarea că răspunsul dvs. este în principiu incorect
uh. Ei bine, producția poate fi considerată incorectă pentru DbGrid "a din conținut, cu excepția faptului că numele coloanelor, toate celelalte date aparțin setului de date".

Prin urmare, îmi pare rău, dar care este întrebarea - acesta este răspunsul.

Da, nu te lupta asa.
Ambele exemple funcționează ca un ceas, dar numai atunci când DataSet este scris în Excel - puteți observa procesul pe DB Gride.


> iVovs # xA0; (22.05.04 15:17) [24]


> există o intrare în Excel - puteți observa procesul pe DB
> Gride.

DataSet.DisableControls
DataSet.EnableControls

La naiba, am dat peste o altă problemă:

My DBGrids sunt pe pagini diferite (PageControl), și pe unul separat - "posibilitatea" de a exporta în Excel în sine. Deci, această caracteristică sau un buton miracol funcționează corect cu acel tabel (adică exportă TOATE înregistrările), a cărui pagină a fost activă înainte de a trece la pagina cu acest buton. Dacă exportați dintr-un alt DBGrid, este afișată o singură linie. Cum sa fii?

Se folosește varianta Vlad.

Da, apropo, și cum să exportați tot ce ar trebui să fie în DBGrid-e, și apoi în acest fel puteți paria cât mai multe rânduri pe care le puteți vedea pe ecran.
Sau poate există un fir de oportunitate direct de la ClientDataSet pentru a exporta tot ce are în Excel. Ajutor, dacă nu lenevie.


> iVovs # xA0; (22.05.04 15:33) [26]

Mai întâi de toate, să definim întrebarea.
Datele trebuie încărcate numai de la DBGrid? (adică numai acelea pe care le vedem)
(în acest caz versiunea mea va funcționa).
sau trebuie să descărcați setul complet de date?
(în acest caz, va funcționa versiunea jack128).

În cazul meu, trebuie să descărcați complet.

Este necesar, în principiu, să exportați datele tot ceea ce este în setul de date, dar deoarece DBGrid afișează un set de date, este posibil din aceasta.


> iVovs # xA0; (22.05.04 15:56) [29]

Apoi, nu vă confundați cu formularea întrebării - acestea sunt două lucruri diferite.
Puteți modifica acest cod prin eliminarea moștenitorului fictiv (TMyDBGrid) și, în consecință, eliminați lucrarea cu toate proprietățile protejate ale DBGrid. Apoi, în loc de DataLink, utilizați DataSource.DataSet

Totul, uv. Maestre, mi-am închipuit această întrebare și am obținut rezultatul dorit.
Codul de mai jos este o generalizare a informațiilor primite cu privire la această problemă - mai ales pentru cei care nu doresc să pătrundă în sensul răspunsurilor la această întrebare :). Acest cod exporta datele din Grid-a în Excel (toate datele furnizate de Grid către setul de date DataSet)

procedura TMAinForm.ToExcel (DBgrid: TDBGrid);
var
a, b: Integer;
ExApp, WB, WS: varianta;
începe
ExApp: = CreateOleObject ("Excel.Application");
WB: = ExApp.WorkBooks.Add;
WS: = lucrări ExApp.Workbooks [1] .File de lucru [1];
cu DbGrid.DataSource.DataSet face
începe
ultimul;
În primul rând;
se încheie;
cu TMyDBGrid (DBGrid) .DataLink face
începe
# xA0; a: = 0;
# xA0; în timp ce nu DbGrid.DataSource.DataSet.eof face

# xA0; începe
# xA0; # xA0; pentru b: = 0 până la (FieldCount-1)
# xA0; # xA0; începe
# xA0; # xA0; # xA0; WS.Cells [a + 1, b + 1]. Valoare: = Câmpuri [b] .AsString;
# xA0; # xA0; se încheie;
# xA0; # xA0; # xA0; DbGrid.DataSource.DataSet.Next;
# xA0; a: = a + 1;
# xA0; se încheie;
# xA0; ExApp.Visible: = true;
# xA0; încerca
# xA0; ExApp.save; // sugerează imediat salvarea
# xA0; cu excepția cazului // pentru a nu jura dacă refuzăm să salvăm
# xA0; se încheie;
se încheie;
se încheie;

Apel (numai numele DBGrid ar trebui să fie trecut):

O mulțime de mulțumiri lui Vlad și Jack128.

Heh, nu ai ascultat sfatul inteligent și nu ai citit articolul de pe prima legătură, cum arăt? Încă o dată vă sfătuiesc să acordați atenție variabilelor. Cu volume mai mult sau mai puțin normale, accelerația este de zeci de sute de ori.


> iVovs # xA0; (22.05.04 16:54) [31]

CND. Ești prea rău pentru ceva :-)
Spun din nou. Dacă trebuie să descărcați din DataSet. apoi eliminați toate DataLink "și lucrați direct cu DataSet" ohm.
Metode Eof, Brad, Urmatorul va va ajuta.

Nu, am nevoie doar de ea, fapt este că vreau să încărcați numai anumite Excel în Excel. câmpuri care afișează DBGrid, dar pentru toate înregistrările care se află în setul de date, ceea ce face codul meu.

Descărcarea din DataSet, am implementat, de asemenea, dar nu am nevoie de toate câmpurile, așa că am descărcat din Grilă.

-------------------------
O carte pe care o citim, că nu este vorba despre asistenți ca aici :)

Am citit-o, dar sincer n-am înțeles cum, în exemplul meu concret, am încărcat în această variantă matrice datele de la DBgrid.

ceea ce este de neînțeles

cu DbGrid1.DataSource.DataSet face
începe
# xA0; Ultima; // fetchim toate înregistrările
# xA0;
# xA0; ArrayData: = VarArrayCreate ([1, RecordCount, 1, Fields.Count], varVariant);
# xA0; // Completați matricea
# xA0; pentru I: = 1 la RecordCount nu
# xA0; începeți
# xA0; # xA0; pentru J: = 1 la Fields.Count do
# xA0; # xA0; # xA0; ArrayData [I, J]: = Fișiere [j-1] .AsVariant;
# xA0; # xA0; Următorul;
# xA0; sfârșitul;
se încheie;


> iVovs # xA0; (22.05.04 17:19) [34]
> Nu, am nevoie doar de ea, este faptul că vreau să încărcați în Excel
> numai sigur. câmpurile afișate de DBGrid

Eh. al naibii, din nou codul de scris

procedura ToExcel;
var
a, b: Integer;
ExApp, WB, WS, Arr: varianta;
începe
a: = 0;
ExApp: = CreateOleObject ("Excel.Application");
WB: = ExApp.WorkBooks.Add;
WS: = lucrări ExApp.Workbooks [1] .File de lucru [1];
cu DBGrid1 face
începe
# xA0; DataSource.DataSet.DisableControls;
# xA0; în timp ce nu DataSource.DataSet.Eof face
# xA0; începeți
# xA0; # xA0; pentru b: = 0 până la (Columns.Count-1) faceți
# xA0; # xA0; începeți
# xA0; # xA0; # xA0; WS.Cells [a + 1, b + 1]. Valoare: = Coloane [b] .Field.AsString;
# xA0; # xA0; sfârșitul;
# xA0; # xA0; DataSource.DataSet.Next;
# xA0; # xA0; Inc (a);
# xA0; sfârșitul;
# xA0; DataSource.DataSet.DisableControls;
# xA0; ExApp.Visible: = adevărat;
se încheie;
se încheie;

Nu am început să remodelez fișierul, nu am vrut.
Dar va arăta exact câmpurile afișate de grilă.

Bună, codul pare să funcționeze, dar când faceți clic pe butonul Pentru Excel (De exemplu), nu # xA0; ceea ce nu se întâmplă! Ce trebuie să faceți în continuare?

Bună, codul pare să funcționeze, dar când faceți clic pe butonul Pentru Excel (De exemplu), nu # xA0; ceea ce nu se întâmplă! Ce trebuie să faceți în continuare?







Trimiteți-le prietenilor: