AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Query trägt in Excel Daten in erster Zeile ein WISO?
Thema durchsuchen
Ansicht
Themen-Optionen

Query trägt in Excel Daten in erster Zeile ein WISO?

Ein Thema von Albi · begonnen am 14. Jun 2003 · letzter Beitrag vom 15. Jun 2003
Antwort Antwort
Seite 1 von 2  1 2      
Albi

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#1

Query trägt in Excel Daten in erster Zeile ein WISO?

  Alt 14. Jun 2003, 12:23
Ich übertrage die Daten aus einem Query in ein Excel Table, das Funktioniert auch, nur trägt er sie immer nur in die erste Excelzeile ein. Was muß ich Delphi sagen, das wenn im Query eine Zeile gelesen wurde und diese zu Ende ist, das in Excel eine neue Zeile angefangen werden soll.

Code:
while not Form1.Query1.EOF do
begin
  {Die Werte aus dem Stringgrid (oder aus einer Datei oder sonstwo her), schrei-
  ben wir jetzt in das Excel.Worksheet.}
 for zeile := 0 to Form1.Query1.FieldCount-1 do
    for spalte := 0 to Form1.Query1.FieldCount-1 do
       Excel.Cells[Spalte+1].value := Form1.Query1.Fields[Spalte].AsString;
Ich habe es schon mit einer Abfrage versucht, da das ja funktioniert, wenn man die Daten in eine Textdatei schreibt aber bei Excel funzt das nicht.
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#2
  Alt 14. Jun 2003, 12:27
Die Zeilennummer wird von Dir nie verwendet. Muß man denn nicht irgendwo sagen, in welche Zeile die Werte geschriben werden sollen. Was verbirgt sich eigentlich hinter Excel (welche Komponente)?
  Mit Zitat antworten Zitat
Albi

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#3
  Alt 14. Jun 2003, 14:02
Excel ist in diesem Fall ein Variante. Ja genau, man muß Excel die Zeilennummer sagen, darum geht es mir ja. Ich sage Excel in diesem Fall nur, das Excel mit dem Eintrag in A:1 beginnen soll. Dann überschreibt er jedesmal dieses Zeile, bis man am letzten angekommen ist.
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#4
  Alt 14. Jun 2003, 14:08
Zitat von Albi:
Excel ist in diesem Fall ein Variante.
Welche Komponente verbirgt sich dahinter? Immerhin hat diese ja Member-Variablen (Cells). Muß man vielleicht in Cells Zeile und Spalte angeben (Cells[iZeile, iSpalte])?
  Mit Zitat antworten Zitat
Albi

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#5
  Alt 14. Jun 2003, 14:29
Code:
for zeile := 0 to Form1.Query1.FieldCount-1 do
    for spalte := 0 to Form1.Query1.FieldCount-1 do
       Excel.Cells[Zeile+1].value := Form1.Query1.Fields[Zeile].AsString;
Also ich verwende ein OLEExcelObjekt und eine ExcelApplication, sicherlich muß ich die Zeile angeben, habe ich ja uch getan mit (Zeile+1), da sie in Excel mit 1 beginnt und nicht wie ne Paradox mit 0. Nun weiß ich aber nicht wie ich ihm das sagen soll, das er dann mal ne Zeile nach unten gehen soll, wenn im Query auch ne neue Zeile beginnt.
  Mit Zitat antworten Zitat
Alfons_G

Registriert seit: 7. Jun 2002
Ort: München
296 Beiträge
 
Delphi 2007 Architect
 
#6
  Alt 14. Jun 2003, 14:59
Erstens verwendest Du für BEIDE Schleifen FieldCount, also die Anzahl der ErgebnisSPALTEN. Du müsstest für die äußere Schleife RowCount nehmen.

Zweitens ist Cells ein ZWEIDIMENSIONALES Array. Eine Zelle sprichst Du über Cells[Zeile, Spalte] an (in VBA wäre es Cells(Zeile, Spalte)). Wenn Du Cells als eindimensionales Array verwendest, schreibt Excel immer alles in die erste Zeile.

Drittens fragst Du immer nur die Erste Zeile der Datenmenge ab. Du musst innerhalb der ERSTEN Schleife jeweils mit Query1.Next weiterblättern.
Es wäre auch zweckmäßig, statt der äusseren for-Schleife mit while not (Query1.Eof) ... durch die Datenmenge zu blättern und eine Variable für die Zeile jeweils um 1 zu erhöhen. Dann bist Du vom Typ der Datenmenge unabhängig.

Alfons Grünewald



Alfons Grünewald
  Mit Zitat antworten Zitat
Albi

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#7
  Alt 14. Jun 2003, 15:21
So sieht mein Code mein Code im ganzen aus.

Code:
var
   zeile, spalte: Integer;
  Excel                  : variant;
begin
  try
     Excel := CreateOleObject('Excel.Application');
  except
     ShowMessage('Excel kann nicht gestartet werden');
    exit;
  end;
  Excel.Visible := true;
  Excel.Workbooks.add;
while not Form1.Query1.EOF do
begin
  {Die Werte aus dem Stringgrid (oder aus einer Datei oder sonstwo her), schrei-
  ben wir jetzt in das Excel.Worksheet.}
 //for zeile := 0 to Form1.Query1.RecordCount-1 do
    for spalte := 0 to Form1.Query1.FieldCount-1 do
       Excel.Cells[Zeile+1,Spalte+1].value := Form1.Query1.Fields[Spalte].AsString;
     Form1.Query1.Next;
  end;
end;
Ich habe jetzt zwar verstanden was Du meinst aber mir fehlen sämtliche Kenntnisse um dieses jetzt auch noch sinnvoll anzuwenden. Ich beschäftige mich noch nicht solang damit.

Ich nehme mir jetzt also eine Variable X: Integer und soll diese dann nach jedem Schleifendurchlauf um 1 erhöhen und diesen Wert dann Cells zuweisen. Stimmt doch, oder?
  Mit Zitat antworten Zitat
Albi

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#8
  Alt 14. Jun 2003, 15:44
Es geht, manchmal braucht man nur einen Denkanstoß oder auch etwas mehr. Ich habe wie Du gesagt hast, einfach noch ne Variable angelegt, die dann bei jedem Durchlauf eins Hochzählt.

Danke.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#9
  Alt 14. Jun 2003, 16:15
Hallo,
dort Daten nach Excel übertragen zeige ich wie man Daten aus Excel ausliest. Daten nach Excel übertragen funktioniert analog dazu.

Außerdem kann man Daten noch über ein variantes Array nach Excel übertragen. Das eignet sich besonders gut für große Datenmengen, da es ziemlich schnell geht.

Das anliegende Beispiel zeigt den Weg über ein variantes Array.
Das Programm lädt aus einer Access2000 Datebank eine Tabelle und schiebt
den Inhalt dann über das Array nach Excel. Außerdem zeigt das Beispiel die Verwendung der nativen ADO Objekte Connection und RecordSet (interessant für alle Delphi Personal Besitzer)
Angehängte Dateien
Dateityp: zip datennachexcel.zip (283,8 KB, 13x aufgerufen)
  Mit Zitat antworten Zitat
Albi

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#10
  Alt 14. Jun 2003, 17:16
Vielen Dank, ich werde es morgen mal ausprobieren. Sieht auf jeden Fall besser aus als meine Variante.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 23:53 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