Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TList (https://www.delphipraxis.net/28236-tlist.html)

semo 21. Aug 2004 18:25


TList
 
ich habe folgendes Problem: ich importiere aus Excel eine Liste an Daten folgendermaßen:

1. lese jede Zeile ein und packe die Inhalte in eine StringList
2. die StringListe packe ich in eine TList
3. die TList will ich dann auslesen

dabei tritt dann bei fehler bei folgender zuweisung auf:
ExcelZeile := TStringList(Schilder.Items[0]);

Was mache ich falsch?


hier der Quelltext:
Code:
private
  { Private-Deklarationen }
    ExcelZeile: TStringList;
    Schilder: TList;
...


procedure TMainForm.ButtonExcelImportClick(Sender: TObject);
var
  schildZeile: TLabel;
  i: Integer;
begin
  OpenDialog.Filter := 'Excel Tabelle(*.xls)|*.xls';
  if OpenDialog.Execute then
  begin
    Schilder  := TList.Create;

    // Excelzeilen einlesen
    ladeZeilen(OpenDialog.Filename);

    ShowMessage(IntToStr(Schilder.Count) + ' Zeilen aus der Excel Tabelle eingelesen');

    // die Zeilen des ersten Schildes anzeigen
    ExcelZeile := TStringList(Schilder.Items[0]);
    ShowMessage('Anzahl der Felder in der StringList:' + #13#10 +
                IntToStr(ExcelZeile.Count));
    for i:=0 to ExcelZeile.Count-1 do
    begin
      schildZeile := TLabel.Create(Gravurflaeche);
      with schildZeile do
      begin
        Parent := Gravurflaeche;
        Visible := true;
        Left   := 10;
        Top    := i*14 + 10;
        Text   := ExcelZeile.ValueFromIndex[i];
        ShowMessage(ExcelZeile.ValueFromIndex[i]);
        Name   := 'Label' + IntToStr(i);
      end;
    end;
    ExcelZeile.Free;
  end;
end;

paelesoft 21. Aug 2004 18:28

Re: TList
 
Zitat:

Zitat von computer-glossar.de
dabei tritt dann bei fehler bei folgender zuweisung auf:

Wie heißt der Fehler? (index oder so?)

semo 21. Aug 2004 18:31

Re: TList
 
zugriffsverletzung

Luckie 21. Aug 2004 18:32

Re: TList
 
Hast du die Stringliste auch irgendwo erzeugt?

semo 21. Aug 2004 18:38

Re: TList
 
mache ich doch mit dieser anweisung:

Code:
ExcelZeile := TStringList(Schilder.Items[0]);

Kernel32.DLL 21. Aug 2004 19:24

Re: TList
 
erzeugt man 'ne Stringlist nicht normalerweise mit:

Delphi-Quellcode:
var
Stringlist: TStringlist;

[...]

Stringlist := TStringlist.create;

Chewie 21. Aug 2004 19:33

Re: TList
 
Zeig uns doch bitte mal die Prozedur LadeZeilen. Denn dort wird (hoffentlich) Schilder gefüllt, was für das Verständnis notwendig ist.

semo 21. Aug 2004 19:42

Re: TList
 
Code:
procedure TMainForm.ladeZeilen(excelFilename: String);
var
  myExcel, Sheet: OLEVariant;
  zeile, spalte, lastRow: Integer;
  index: Integer;
  tempStringList: TStringList;
begin
  if excelFilename <> '' then
  begin
    try
      // Create Excel-OLE Object
      myExcel := CreateOleObject('Excel.Application')
    except
      ShowMessage('Excel konnte nicht gestartet werden!');
      exit
    end;

    // Excel verbergen
    myExcel.Visible := false;

    // Öffnen der gewählten Arbeitsmappe
    myExcel.Workbooks.Open(excelFilename);

     Sheet := myExcel.Workbooks[1].WorkSheets[1];
    //Sheet := myExcel.Workbooks[ExtractFileName(excelFilename)].WorkSheets[1];

    // die letzte nicht leere Zelle aktivieren
    Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;

    // ich muss jede Zeile einlesen und jede Zeile kann unterschiedlich viel Spalten haben
    // von 1 bis lastRow eine For-Schleife durchlaufen
    // lastCol pro Zeile in der Schleife ermitteln
    // --> die einzelnen Zellinhalt in ein Array packen
    // --> das Array (entspricht dem kompletten Inhalt einer Zeile) in eine Liste packen
    lastRow := myExcel.ActiveCell.Row;

    tempStringList := TStringList.Create;
    for zeile := 1 to lastRow do
    begin
      spalte := 1;
      tempStringList.Clear;
      while (myExcel.Cells[zeile, spalte].Value <> '') do
      begin
        //SetLength(ArrOfZeilen, spalte); // Arraylänge erhöhen
        //ArrOfZeilen[spalte-1] := myExcel.Cells[zeile, spalte].Value;
        index := tempStringList.Add(myExcel.Cells[zeile, spalte].Value);
        {ShowMessage('Zeile: ' + IntToStr(zeile) + #13#10 +
                    'Spalte: ' + IntToStr(spalte) + #13#10 +
                    'Value: ' + myExcel.Cells[zeile, spalte].Value + #13#10 +
                    'index in Excelzeile: ' + IntToStr(index));
        }
        Inc(spalte);
      end;
      Schilder.Add(tempStringList);
      Caption := IntToStr(Schilder.Count);
    end;

    // Quit Excel
    if not VarIsEmpty(myExcel) then
    begin
      myExcel.DisplayAlerts := False;
      myExcel.Quit;
      myExcel := Unassigned;
      Sheet  := Unassigned;
    end ;
    tempStringList.Free
  end;
end;

Kernel32.DLL 21. Aug 2004 19:48

Re: TList
 
Also, ihr könnt mich ja für blöde erklären, aber mein:

Code:
ExcelZeile := TStringList.Create;
habe ich immer noch nicht gefunden!

Das brauch' man doch, oder?

*Weltanschauung durcheinander werf*

semo 21. Aug 2004 19:53

Re: TList
 
ich habe das mal so gelernt dass man die ein Objekt erzeugen kann wenn man das Item einer TList unter Angabe des Objekttypes zuweist, sind ja nur pointer die da zugewiesen werden

stringListe := TStringList(List.Items[0]);


folgendes bringt mich nämlich auch nicht weiter:
Code:
ExcelZeile := TStringList.Create;
// die Zeilen des ersten Schildes anzeigen
ExcelZeile := Schilder.Items[0];
:gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:43 Uhr.
Seite 1 von 2  1 2      

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