![]() |
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 |
Re: Inhald eines DBGrid nach Excel exportieren ?
Hallo Vader,
entweder du schreibst die Zeilen selber nach Excel...
Delphi-Quellcode:
Oder du übergibst die SQL-Abfrage, die dein DBGrid anzeigt an Excel...
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; (Excel holt dann selbst die Daten von der Datenbank)
Delphi-Quellcode:
Dafür muss allerdings die MSQuery installiert sein.
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; Edit... und hier nochmal eine Methode, die ein DBGrid erwartet und den Inhalt direkt nach Excel schreibt...
Delphi-Quellcode:
MfG
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; Thorsten |
Re: Inhald eines DBGrid nach Excel exportieren ?
hall omata
habe deinen letzten code ausprobiert, aber es kommt der fehler
Delphi-Quellcode:
ach noch was, ich hab da eine komponente bei mir gefunden die heißt " ExcelQueryTable " ,
[Fehler] Unit1.pas(113): Undefinierter Bezeichner: 'Range'
ist die mir bei meinen anliegen behilflich ? mfg vader |
Re: Inhald eines DBGrid nach Excel exportieren ?
hallo,
das mit dem range hat sich erledigt, ich muß bei D6 das so schreiben
Delphi-Quellcode:
aber wie rufe ich deine
Zelle:=Excel.Cells.Range_
Delphi-Quellcode:
auf ??
procedure DBGridToExcel(DBGrid:TDBGrid; StartSpalte, StartZeile:integer);
type TSpalten = array[1..256] of string; habe es so versucht,
Delphi-Quellcode:
eine excelmappe wird geöffnet aber es wird nichts importiert ???
procedure TForm1.Button3Click(Sender: TObject);
begin DBGridToExcel(DBGrid1,1,1); end; mfg vader |
Re: Inhald eines DBGrid nach Excel exportieren ?
Wird den im DBGrid etwas angezeigt?
Nur dann wird auch etwas exportiert. Gruss Thorsten |
Re: Inhald eines DBGrid nach Excel exportieren ?
Liste der Anhänge anzeigen (Anzahl: 1)
siehe foto !
mfg vader |
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... |
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 ![]() ![]() Aber das alles hat nur Sinn wenn man den Code auch versteht und nicht einfach nur kopiert ;-) |
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.
|
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 22:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz