Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Inhald eines DBGrid nach Excel exportieren ? (https://www.delphipraxis.net/71578-inhald-eines-dbgrid-nach-excel-exportieren.html)

Vader 17. Jun 2006 16:38

Datenbank: Paradox • Version: 7 • Zugriff über: TQuery

Inhald eines DBGrid nach Excel exportieren ?
 
hallo,
kann man den inhald eines DBGrid nach excel exportieren,wenn ja, wie ???
mfg vader

omata 17. Jun 2006 17:31

Re: Inhald eines DBGrid nach Excel exportieren ?
 
Hallo Vader,

entweder du schreibst die Zeilen selber nach Excel...

Delphi-Quellcode:
uses ... OleServer, Excel2000 ...
:
:
var Excel:TExcelApplication;
    lcid:integer;
    Workbook:_Workbook;
    Inhalt:Variant;
begin
  Excel:=TExcelApplication.Create(Self);
  try
    lcid:=GetUserDefaultLCID;
    Excel.Connect;
    Excel.Visible[lcid] := true;
    Excel.UserControl:=true;

    Workbook:=Excel.Workbooks.Add(EmptyParam, lcid);

    Inhalt:='Hallo';
    Excel.Cells.Range['A1', 'A1'].Value:=Inhalt;

  finally
    Excel.Disconnect;
    Excel.free;
  end;
end;
Oder du übergibst die SQL-Abfrage, die dein DBGrid anzeigt an Excel...
(Excel holt dann selbst die Daten von der Datenbank)

Delphi-Quellcode:
uses ... OleServer, Excel2000 ...
:
:
var Excel:TExcelApplication;
    lcid:integer;
    Workbook:_Workbook;
    Query, Range, Sheet:Variant;
    User, Database, ODBCname:string;
begin
  Excel:=TExcelApplication.Create(Self);
  try
    lcid:=GetUserDefaultLCID;
    Excel.Connect;
    Excel.Visible[lcid] := true;
    Excel.UserControl := true;

    Workbook:=Excel.Workbooks.Add(EmptyParam, LCID);

    User:='ich';
    ODBCname:='LocalServer';
    Database:='MeineDatenbank';

    Sheet:=Workbook.ActiveSheet;
    Range := Excel.Cells.Range['A1', 'A1'];
    Query:=Sheet.QueryTables.Add(
      'ODBC;' +
      'DSN=' + ODBCname + ';' +
      'UID=' + User + ';' +
      'APP=Microsoft® Query;' +
      'DATABASE=' + Database + ';' +
      'Trusted_Connection=Yes',
      Range
    );
    Query.CommandText:='SELECT * FROM tabelle';
    Query.Name:= 'Meine Abfrage von LocalServer';
    Query.FieldNames := True;
    Query.RowNumbers := False;
    Query.FillAdjacentFormulas := False;
    Query.PreserveFormatting := True;
    Query.RefreshOnFileOpen := False;
    Query.BackgroundQuery := True;
    Query.RefreshStyle := xlInsertDeleteCells;
    Query.SavePassword := True;
    Query.SaveData := True;
    Query.AdjustColumnWidth := True;
    Query.RefreshPeriod := 0;
    Query.PreserveColumnInfo := True;
    Query.Refresh(False);
  finally
    Excel.Disconnect;
    Excel.free;
  end;
end;
Dafür muss allerdings die MSQuery installiert sein.

Edit...
und hier nochmal eine Methode, die ein DBGrid erwartet und den Inhalt direkt nach Excel schreibt...

Delphi-Quellcode:
procedure DBGridToExcel(DBGrid:TDBGrid; StartSpalte, StartZeile:integer);
type TSpalten = array[1..256] of string;

  function CreateSpalten:TSpalten;
  var i, j, x:integer;
      abbruch:boolean;
  begin
    x:=1;
    abbruch:=false;
    j:=0;
    while (j <= 26) and not abbruch do begin
      i:=1;
      while (i <= 26) and not abbruch do begin
        if j = 0 then
          Result[x]:=chr(i+64)
        else
          Result[x]:=chr(j+64)+chr(i+64);
        inc(i);
        inc(x);
        abbruch:=(x > 256);
      end;
      inc(j);
    end;
  end;

var Excel:TExcelApplication;
    i, Zeile, lcid:integer;
    Workbook:_Workbook;
    Sheet, Zelle, Inhalt:Variant;
    Spalten:TSpalten;
begin
  if    assigned(DBGrid)
     and assigned(DBGrid.DataSource)
     and assigned(DBGrid.DataSource.DataSet) then
  begin
    if DBGrid.DataSource.DataSet.Active then begin
      Excel:=TExcelApplication.Create(nil);
      try
        lcid:=GetUserDefaultLCID;
        Excel.Connect;
        Excel.Visible[lcid]:=true;
        Excel.UserControl:=true;

        Workbook:=Excel.Workbooks.Add(EmptyParam, lcid);

        Spalten:=CreateSpalten;
        Zeile:=StartZeile;
        for i:=1 to DBGrid.FieldCount do begin
          Inhalt:=DBGrid.Fields[i-1].DisplayName;
          Zelle:=Excel.Cells.Range[
            Spalten[i+StartSpalte-1]+inttostr(Zeile),
            Spalten[i+StartSpalte-1]+inttostr(Zeile)
          ];
          Zelle.Value:=Inhalt;
          Zelle.Font.Bold:=true;
        end;

        DBGrid.DataSource.DataSet.First;
        while not DBGrid.DataSource.DataSet.Eof do begin
          inc(Zeile);
          for i:=1 to DBGrid.FieldCount do begin
            Inhalt:=DBGrid.DataSource.DataSet.FieldByName(
              DBGrid.Fields[i-1].FieldName
            ).AsString;
            Zelle:=Excel.Cells.Range[
              Spalten[i+StartSpalte-1]+inttostr(Zeile),
              Spalten[i+StartSpalte-1]+inttostr(Zeile)
            ];
            Zelle.Value:=Inhalt;
          end;
          DBGrid.DataSource.DataSet.Next;
        end;

        Sheet:=Workbook.ActiveSheet;
        Sheet.Columns[
          Spalten[StartSpalte]+':'+Spalten[StartSpalte+DBGrid.FieldCount]
        ].EntireColumn.AutoFit;

      finally
        Excel.Disconnect;
        Excel.free;
      end;
    end;
  end;
end;
MfG
Thorsten

Vader 17. Jun 2006 19:39

Re: Inhald eines DBGrid nach Excel exportieren ?
 
hall omata

habe deinen letzten code ausprobiert, aber es kommt der fehler
Delphi-Quellcode:
[Fehler] Unit1.pas(113): Undefinierter Bezeichner: 'Range'
ach noch was, ich hab da eine komponente bei mir gefunden die heißt " ExcelQueryTable " ,
ist die mir bei meinen anliegen behilflich ?
mfg vader

Vader 17. Jun 2006 19:51

Re: Inhald eines DBGrid nach Excel exportieren ?
 
hallo,

das mit dem range hat sich erledigt, ich muß bei D6 das so schreiben
Delphi-Quellcode:
Zelle:=Excel.Cells.Range_
aber wie rufe ich deine

Delphi-Quellcode:
procedure DBGridToExcel(DBGrid:TDBGrid; StartSpalte, StartZeile:integer);
type TSpalten = array[1..256] of string;
auf ??
habe es so versucht,
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
begin
  DBGridToExcel(DBGrid1,1,1);
end;
eine excelmappe wird geöffnet aber es wird nichts importiert ???



mfg vader

omata 17. Jun 2006 20:13

Re: Inhald eines DBGrid nach Excel exportieren ?
 
Wird den im DBGrid etwas angezeigt?

Nur dann wird auch etwas exportiert.

Gruss
Thorsten

Vader 17. Jun 2006 20:52

Re: Inhald eines DBGrid nach Excel exportieren ?
 
Liste der Anhänge anzeigen (Anzahl: 1)
siehe foto !
mfg vader

omata 17. Jun 2006 21:57

Re: Inhald eines DBGrid nach Excel exportieren ?
 
Tja, dann weiss ich das auch nicht.

Was ist den mit der 1. Variante? Funktioniert die?
Was ist mit der 2. Variante, gibt es ein SQL-Statement? Kannst du nicht das nehmen und mit Excel abfragen?
Bei der 3. Variante was sagt das der Debugger? Geh doch mal die einzelnen Zeilen durch, bei welcher macht er den nicht das was du willst? Ist DBGrid.FieldCount > 0?

Fragen über Fragen, meine Glaskugel ist heute leider zur Reperatur...

Sharky 18. Jun 2006 06:17

Re: Inhald eines DBGrid nach Excel exportieren ?
 
Hai,

grundsätzlich würde ich nicht aus einem DBGrid exportieren sondern aus einem TDataSet. Das ist dann doch viel flexibler.
Eine 10 sekündige Suche in der DP hat mich zum Beispeil zu diesem Thread geführt der unter andem einen Link zu diesen Seite hat.

Aber das alles hat nur Sinn wenn man den Code auch versteht und nicht einfach nur kopiert ;-)

mkinzler 18. Jun 2006 08:55

Re: Inhald eines DBGrid nach Excel exportieren ?
 
Obwohl ich Sharky's Meinung bin, das Ein DBGrid nur zur Anzeige dient und Manipulationen, Export usw. immer an der dahinterliegende Datenmenge durchgeführt werden sollte, hier noch ne Möglichkeit für das Grid. In JVCL gibt es verschiedene Kompos um aus einem Grid zu exportieren z.B. TJvDBGridExcelExport. Möglicherweise benötigst du dann aber das Jedi DBGrid.

Sharky 18. Jun 2006 11:02

Re: Inhald eines DBGrid nach Excel exportieren ?
 
BTW:
Wenn in der Exceldatei (.xls) nicht irgendwelche Formeln hinterlegt sind kannst Du das ganze doch einfach in eine .CSV schreiben und diese dann mit Excel öffnen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:54 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz