AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Inhald eines DBGrid nach Excel exportieren ?
Thema durchsuchen
Ansicht
Themen-Optionen

Inhald eines DBGrid nach Excel exportieren ?

Ein Thema von Vader · begonnen am 17. Jun 2006 · letzter Beitrag vom 11. Okt 2006
Antwort Antwort
Seite 2 von 3     12 3      
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#11

Re: Inhald eines DBGrid nach Excel exportieren ?

  Alt 18. Jun 2006, 12:11
Desweiteren kann man einen ADO-Connectionstring erstellen:

Code:
"Provider=MSDASQL.1;Persist Security Info=False;Data Source=Excel-Dateien;Initial Catalog=C:\MyExcelExport"
Allerdings muss dann die Datei existieren. Es kann sein, das die Jet-Engine Tabellen erzeugen kann ('Create Table ...'), das hab ich aber noch nicht ausprobiert.

Excel per OLE die Arbeit erledigen zu lassen ist bequem, aber unglaublich langsam. Besser CSV (wenn das Layout keine Rolle spielt) oder eben eine der Freeware Excel-Export-Tools.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Vader

Registriert seit: 6. Mai 2003
804 Beiträge
 
Delphi 6 Enterprise
 
#12

Re: Inhald eines DBGrid nach Excel exportieren ?

  Alt 18. Jun 2006, 12:22
hallo sharky

habe den thread von kosch andreas angeschaut, der basiert aber auf ADOkomponenten, ich habe aber BDEkomponenten ( Query mit Datasource in meinen Projekt )
du schreibst :
Zitat:
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.
wie geht das ???

hallo mkinzler, du schreibst:

Zitat:
TJvDBGridExcelExport, Möglicherweise benötigst du dann aber das Jedi DBGrid.
das kann ich jetzt nicht mehr realisieren, weil die jedis bei meinen d6 enterprise
nicht laufen, und ich werde mir das nicht mehr antun das zu versuchen !!
kann man eine einzelen jedikomponente auch so auf mein d6 installieren ?

hallo omata

mit der ersten variante komme ich nicht klar, da fehlt mir der durchblick
mit der zweiten variante , da sollte MSQuery installiert sein, da weiß ich auch nicht weiter
funktioniert bei dir die dritte variante mit meinen aufruf der prozedure ?

mfg vader
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#13

Re: Inhald eines DBGrid nach Excel exportieren ?

  Alt 18. Jun 2006, 12:37
Zitat:
Zitat:
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.


wie geht das ???
Eine CSV-Datei ist eine normale Textdatei, bei der die einzelnen Felder durch Trennzeicher getrennt sind ( in D normalerweise ';')
Diese kann ganz einfach in Excel geladen und als xls gespeicher werden.
Diese erhältst du einfach in dem du die Felder nacheinander in eine Textdatei schreibst und dazwischen jeweils ein Semikolon setzt.

Delphi-Quellcode:
zeile := query.Fields.FieldByNumber(0).asString;
for i := 1 to Query.Fields.Count-1 do
begin
  Zeile := zeile + '; ' + query.Fields.FieldByNumber( i).asString;
end;
Zitat:
kann man eine einzelen jedikomponente auch so auf mein d6 installieren ?
Nicht so einfach, da Abhängigkeiten zwischen den Klassen bestehen.
Markus Kinzler
  Mit Zitat antworten Zitat
Vader

Registriert seit: 6. Mai 2003
804 Beiträge
 
Delphi 6 Enterprise
 
#14

Re: Inhald eines DBGrid nach Excel exportieren ?

  Alt 18. Jun 2006, 14:42
hallo,

jetzt habe ich so viele möglichkeiten aber nirgenswo komme ich weiter,
habe das 2 beispiel von omata probiert,

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;


muß ich bei den codezeilen an mein projekt anpassen ?

Delphi-Quellcode:
User:='ich';
    ODBCname:='LocalServer';
    Database:='MeineDatenbank';

und

Query.CommandText:='SELECT * FROM tabelle';
    Query.Name:= 'Meine Abfrage von LocalServer';

es wird beim ausführen eine excelmappe geöffnet,und dann kommt ein fenster wo steht datenquelle auswählen,
welche muß ich auswählen ?

und es kommt der fehler: Allgemeiner ODBC FEHLER !!!

mfg vader
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#15

Re: Inhald eines DBGrid nach Excel exportieren ?

  Alt 18. Jun 2006, 14:49
hallo vader, wie du selbst bemerkt hast, arbeitet das Bsp-Programm mit Ado-Komponenten, deines ab mit Bde-Komponeneten, also mußt du nur alles was mt Ado zu tun hat, mit der BDE-Variante ersetzen.
Markus Kinzler
  Mit Zitat antworten Zitat
Vader

Registriert seit: 6. Mai 2003
804 Beiträge
 
Delphi 6 Enterprise
 
#16

Re: Inhald eines DBGrid nach Excel exportieren ?

  Alt 18. Jun 2006, 15:56
hallo mkinzler,
und wie soll das ausschauen, weches muß ich mit welchem ersetzten ?
mfg vader
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#17

Re: Inhald eines DBGrid nach Excel exportieren ?

  Alt 18. Jun 2006, 17:52
Hallo Vader,

Zitat von Vader:
mit der ersten variante komme ich nicht klar, da fehlt mir der durchblick
ok, aber funktioniert sie?

Zitat von Vader:
mit der zweiten variante, da sollte MSQuery installiert sein, da weiß ich auch nicht weiter
Wie sieht den dein SQL-Statement aus? Du kannst auch einfach mal Excel öffnen und über Daten->Externe Daten->Neue Abfrage erstellen mal ausprobieren ob Excel das ohne Delphifernsteuerung hinbekommt.
Da du ja mit der BDE arbeitest, bin ich davon ausgegangen, dass du auch eine TDatabase-Komponente benutzt. Dort gibst du ja auch einen ODBC-Namen an. Diesen benötigt auch Excel.
Also Neue Abfrage erstellen, dann geht die MSQuery auf und du kannst dort dann deinen ODBC-Alias auswählen. Danach werden dir die Tabellen angezeigt. Wähle einfach mal eine aus, füge sie hinzu und geh auf schliessen. Dann ziehst du den * ins untere Grid und siehst den Inhalt der Tabelle. Über Daten->Daten an Excel zurückgeben werden die Daten an Excel übergeben. Dies ist nur ein Test und zeigt dir schonmal, wie man das normalerweise macht. Wenn das alles soweit geht, dann sollte auch die Fernsteuerung des Ganzen eigentlich gehen.

Zitat von Vader:
funktioniert bei dir die dritte variante mit meinen aufruf der prozedure?
Ja, bei mir geht diese Variante wunderbar. Und natürlich haben hier einige Recht, dass man das Grid nur als Anzeige nehmen soll. Genau das passiert hier ja auch. Über das Grid kommt man an das Dataset, das dahinter liegt. Dieses Dataset wird ausgelesen. Diese Variante habe ich nur geschrieben, weil es genau deiner Frage entsprach. In dieser Variante werden die Zellen selber nach Excel geschrieben. Das das langsam ist ist schon klar, nur wenn man nicht vorraussetzen kann/oder will, dass die MSQuery installiert ist, muss man es halt selber reinschreiben. CSV-Import ist ja ganz nett, nur kann man dann keine Formatierungen anwenden.


Zitat von omata:
Zitat von Vader:
muß ich bei den codezeilen an mein projekt anpassen?
User:='ich';
ODBCname:='LocalServer';
Database:='MeineDatenbank';
Query.CommandText:='SELECT * FROM tabelle';
Query.Name:= 'Meine Abfrage von LocalServer';
Ja must du. Ich dachte das wäre erkennbar, sorry.
Also User ist der User in der Datenbank (Berechtigungen), ODBCname ist dein ODBC-Alias, der zu der Datenbank führt. Database ist der Name deiner Datenbank. Query.CommandText muss die SQL-Abfrage enthalten, das ist die die auch dein DBGrid mit Inhalt füllt. Query.Name ist unwichtig, nur eine Spielerei. Ich sehe gerade das ich nicht an ein Passwort gedacht habe. Ist deine Datenbank mit einem Passwort gesichert? Wenn ja, muss einfach noch Password=??? hinter den User im Connection-String.

Ich musste gerade feststellen, dass das bei mir so auch nicht geht. Ich bekomme als eingeschrängter Benutzer auch einen allgemeinen ODBC-Fehler. Also probiere es mal als Administrator. Das ist dann allerdings keine schöne Lösung. Da wäre wohl eine ordentliche Datenbank sinnvoller...

@mkinzler: mein Vorschlag arbeitet nicht mit ADO-Komponenten.

MfG
Thorsten
  Mit Zitat antworten Zitat
Vader

Registriert seit: 6. Mai 2003
804 Beiträge
 
Delphi 6 Enterprise
 
#18

Re: Inhald eines DBGrid nach Excel exportieren ?

  Alt 18. Jun 2006, 18:04
hallo omata,

das muß ich jetzt einmal verdauen,aber die dritte variante von dir würde mir genau passen, weill ich ganz kleine
datenbanken habe und nicht viel zum auslesen, aber es kommt bei excel nichts an, du hast geschrieben, ich sollte
mal debuggen und das ist leider auch etwas was ich nie mache, aber ich habe es probiert, und ich bleibe im der while - schleife hängen !!!

Delphi-Quellcode:
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;

ist das der fehler bei der function CreateSpalten:TSpalten; ???

mfg vader
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#19

Re: Inhald eines DBGrid nach Excel exportieren ?

  Alt 18. Jun 2006, 18:15
Naja, die Schleife läuft bis x > 256. Das kann im Einzelschrittmodus etwas länger dauern. Überspringe doch CreateSpalten mit F8.
  Mit Zitat antworten Zitat
Vader

Registriert seit: 6. Mai 2003
804 Beiträge
 
Delphi 6 Enterprise
 
#20

Re: Inhald eines DBGrid nach Excel exportieren ?

  Alt 18. Jun 2006, 18:59
ok, mit F8 bin daraus gekommen, aber jetzt stecke ich hier fest auch mit F8

Delphi-Quellcode:
 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;

ist dort der fehler ???
mfg vader
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:44 Uhr.
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