AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ole Excel Spaltenlänge herausfinden

Ein Thema von eragon123 · begonnen am 19. Mär 2010 · letzter Beitrag vom 10. Jun 2010
Antwort Antwort
Seite 1 von 2  1 2      
eragon123

Registriert seit: 6. Mär 2010
53 Beiträge
 
#1

Ole Excel Spaltenlänge herausfinden

  Alt 19. Mär 2010, 16:08
Ich habe mit googeln leider nichts finden können. Daher frage ich hier mal nach. Ich steuere Excel per OLE mit meinem Delphiprogramm. Das soll ne Datei öffnen und die gesammte erste Spalte kopieren in ein array, da ich das später dann brauche. Jetzt weiß ich aber die genaue Länge der Spalte nicht (damit ist gemeint bis wohin da Werte drinstehen). Wie bekomme ich das raus? Bei meinem Text meckert er immer. Hier mal mein QT (Ausschnitt):

Delphi-Quellcode:
// Excel starten
  try
    Excel := CreateOleObject('Excel.Application');
  except
    ShowMessage('Excel konnte nicht gestartet werden!');
    Exit;
  end;

  // Laden
  try
    Excel.workbooks.open(edtquelle.Text);
  except
    ShowMessage('Datei konnte nicht geöffnet werden');
    Excel.free;
    Exit;
  end;

  // Daten Kopieren
  menge := Excel.activeworksheet.range['A1','A1'].EntireColumn;

  setlength(namensliste,0);
  for i := 1 to menge do
  begin
    SetLength(namensliste,Length(namensliste)+1);
    namensliste[i-1] := excel.cells[inttostr(i),1].value;
  end;
So müsste das ja theoretisch gehen. Bloß der Befehl um in "Menge" die Länge der Spalte reinzuschreiben geht nicht. Hoffe auf Tipps
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Ole Excel Spaltenlänge herausfinden

  Alt 19. Mär 2010, 16:39
Delphi-Quellcode:
XLSheet := XLApp.ActiveWorkbook.Worksheets[i];
xMin := 1;
yMin := 1;
xMax := XLSheet.UsedRange.Columns.Count;
yMax := XLSheet.UsedRange.Rows.Count;
Data := VarArrayCreate([yMin, yMax, xMin, xMax], varVariant);
Data := XLSheet.UsedRange.Value;
  Mit Zitat antworten Zitat
eragon123

Registriert seit: 6. Mär 2010
53 Beiträge
 
#3

Re: Ole Excel Spaltenlänge herausfinden

  Alt 19. Mär 2010, 17:30
Ok hab jetzt:
Delphi-Quellcode:
procedure TForm1.btngoClick(Sender: TObject);
var Verz: string; i,xmin,xmax,ymin,ymax:Integer; Excel: Variant;

  // Excel öffnen und auslesen
  // Excel starten
  try
    Excel := CreateOleObject('Excel.Application');
  except
    ShowMessage('Excel konnte nicht gestartet werden!');
    Exit;
  end;

  // Laden
  try
    Excel.workbooks.open(edtquelle.Text);
  except
    ShowMessage('Datei konnte nicht geöffnet werden');
    Excel.free;
    Exit;
  end;

  // Daten Kopieren

  XLSheet := Excel.ActiveWorkbook.Worksheets[1];
  xMin := 1;
  yMin := 1;
  xMax := XLSheet.UsedRange.Columns.Count;
  yMax := 1;
  namensliste := VarArrayCreate([yMin, yMax, xMin, xMax], varString);
  namensliste := XLSheet.UsedRange.Value;

  Excel.Activeworkbook.saved := True;
  Excel.workbooks.close;
  Excel.quit;
  Excel := unassigned;
Aber es funktioniert noch nicht. Deshalb ein paar Fragen:
ist
Delphi-Quellcode:
XLSheet: Variant;
namensliste: array of string;
korrekt?

Oder muss ich nen array of variant oder so ähnlich nehmen um das zu speichern?
Ich brauche das später nämlich nur noch als Strings.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Ole Excel Spaltenlänge herausfinden

  Alt 19. Mär 2010, 21:16
Delphi-Quellcode:
// ein Variant Array wird erzeugt
namensliste := VarArrayCreate([yMin, yMax, xMin, xMax], varString);
// das bisherige Variant-Array wird freigegeben!
// es erfolgt eine neue Zuweisung
namensliste := XLSheet.UsedRange.Value;
// hier müsste man erst mal schauen, was genau in namensliste steht
// es könnte ein einzelner Wert sein oder auch ein 1- oder 2-dimensionales Variant-Array
if not VarIsArray(namensliste) then
   ShowMessage('kein Array');
ShowMessageFmt('Dimensionen: %d', [VarArrayDimCount(namensliste)]);
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Ole Excel Spaltenlänge herausfinden

  Alt 19. Mär 2010, 22:14
Hallo eragon123,

namensliste := VarArrayCreate([yMin, yMax, xMin, xMax], varString); besser ist:

namensliste := VarArrayCreate([yMin, yMax, xMin, xMax], varOLEStr); Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Ole Excel Spaltenlänge herausfinden

  Alt 19. Mär 2010, 22:26
Zitat von Chemiker:
besser ist:
namensliste := VarArrayCreate([yMin, yMax, xMin, xMax], varOLEStr);
Das ist bringt aber nichts, weil das Array sowieso überschrieben wird.
Vergleiche das mal mit:
Delphi-Quellcode:
var
  a : Variant;
begin
  a := 3.14;
  a := 'test';
Die erste Zuweisung ist sinnlos, da die Variable a in der zweiten Zuweisung überschrieben wird.
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Ole Excel Spaltenlänge herausfinden

  Alt 19. Mär 2010, 22:43
Hallo sx2008,

varString = $0100; { Pascal string 256 } {not OLE compatible } Ist so in der System-Unit angegeben.

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Ole Excel Spaltenlänge herausfinden

  Alt 19. Mär 2010, 23:09
Zitat von Chemiker:
varString = $0100; { Pascal string 256 } {not OLE compatible } Ist so in der System-Unit angegeben.
Wir reden irgendwie aneinander vorbei.
Es ist völlig egal wie das Variantarray erzeugt wird - es spielt absolut keine Rolle, weil es in der nächsten Anweisung zerstört wird.
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Ole Excel Spaltenlänge herausfinden

  Alt 22. Mär 2010, 14:21
Das Variantarray zu erzeugen ist natürlich nur notwendig, wenn Daten nach Excel exportiert werden.
Die Zeile kann deshalb hier entfallen. Zumindest ist so Struktur und Typ der Daten erkennbar (dachte ich).
Delphi-Quellcode:
{Zugriff über Zeile, Spalte}
for y := yMin to yMax do
  for x := xMin to xMax do
    if VarIsEmpty(Data[y, x]) then
      Stringrid1.Cells[x, y] := ''
    else
      Stringrid1.Cells[x, y] := Data[y, x];
Edit:
Datum/Zeit wird so noch nicht richtig angezeigt.
  Mit Zitat antworten Zitat
eragon123

Registriert seit: 6. Mär 2010
53 Beiträge
 
#10

AW: Ole Excel Spaltenlänge herausfinden

  Alt 7. Jun 2010, 21:48
Ich hätte hier nochmal eine Frage zu. Ich arbeite mittlerweile an einem anderen ähnlichen Projekt. Ich habe eine Exceldatei, in der die ersten paar Zeilen leer sind bzw. zum Teil in einzelnen Spalten Daten stehen die mich nicht interessieren. Dann kommt ein Reihe von Zeilen, in denen Werte stehen. 3 Spalten hieraus will ich auslesen.
Also z.B. Spalte 5 Zeile 8 bis x, wobei x eben dort ist wo die Daten aufhören, das kann unterschiedlich sein.

xMax := XLSheet.UsedRange.Columns.Count scheint dabei nicht zu helfen. Das spuckt irgendwie immer nur 3 aus obwohl die ersten Zeilen leer sind und danach viel mehr als 3 Zeilen mit Daten folgen. Woher weiß er überhaupt um welche Spalte es geht? Und das er die ersten leeren Spalten übergehen muss? Hat da jemand einen Tipp wie ich das machen könnte?
  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 01:40 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