![]() |
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; |
Re: TList
Zitat:
|
Re: TList
zugriffsverletzung
|
Re: TList
Hast du die Stringliste auch irgendwo erzeugt?
|
Re: TList
mache ich doch mit dieser anweisung:
Code:
ExcelZeile := TStringList(Schilder.Items[0]);
|
Re: TList
erzeugt man 'ne Stringlist nicht normalerweise mit:
Delphi-Quellcode:
var
Stringlist: TStringlist; [...] Stringlist := TStringlist.create; |
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.
|
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; |
Re: TList
Also, ihr könnt mich ja für blöde erklären, aber mein:
Code:
habe ich immer noch nicht gefunden!
ExcelZeile := TStringList.Create;
Das brauch' man doch, oder? *Weltanschauung durcheinander werf* |
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:
:gruebel:
ExcelZeile := TStringList.Create;
// die Zeilen des ersten Schildes anzeigen ExcelZeile := Schilder.Items[0]; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:49 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 by Thomas Breitkreuz