![]() |
Array mit Variablen?
Hallo,
ich habe ein kleines Problem welches sicherlich schon einige hier hatten ;) Also in meinem Programm geht es darum, Kundendaten die in eine Exceltabelle geschrieben wurden, einzulesen und in Outlook als Kontakte zu speichern, dies funktioniert eigentlich auch schon Wunderbar. Der Knackpunkt ist jetzt aber das die Kundenkontakte in der Exceltabelle mehrere Ansprechpartner in den jeweiligen Firmen haben können aber nicht klar definiert ist wieviele es maximal sein können. Z.Z. ist es so das ich mit maximal 5 Ansprechpartnern pro Kundenkontakt rechne und es auch so programmiert habe das fünf Ansprechpartner für einen Kontakt in Outlook gespeichert werden. Aber wie das so ist gibt es irgendwann einen Kunden der sechs Ansprechpartner hat, deswegen möchte ich das gerne dynamisch machen aber ich weiß nicht genau wie. Hier ist erstmal meine procedure wie ich sie z.Z. habe, sprich mit dem festen Wert von fünf Ansprechpartnern pro Kundenkontakt:
Delphi-Quellcode:
Ich habe schon probiert die ganzen Blöcke in eine Schleife zu packen, in etwa so(einfach mal so runter geschrieben, sind bestimmt ein paar Fehler drin):
procedure TKontakt.FillProbs(WorkSheet: _WorkSheet; activeRow : Integer;
APCount, FillCount, lastActiveRow : Integer; isHeader : Boolean); var isZero : Boolean; isEmptyStr : String; begin if isHeader and (FillCount <= 1) then begin inc(activeRow); activeRow := activeRow + APCount; end else begin activeRow := lastActiveRow + APCount; end; FLastActiveRow := activeRow; KndNr := Worksheet.Cells.Item[activeRow, 1].Value; CompanyName := Worksheet.Cells.Item[activeRow, 2].Value; FullName := Worksheet.Cells.Item[activeRow, 3].Value; BusinessAdressStreet := Worksheet.Cells.Item[activeRow, 4].Value; BusinessAddressPostalCode := Worksheet.Cells.Item[activeRow, 5].Value; BusinessAddressCity := Worksheet.Cells.Item[activeRow, 6].Value; BusinessTelephoneNumber := Worksheet.Cells.Item[activeRow, 7].Value; BusinessFaxNumber := Worksheet.Cells.Item[activeRow, 8].Value; EmailAddress := Worksheet.Cells.Item[activeRow, 9].Value; BusinessHomePage := Worksheet.Cells.Item[activeRow, 10].Value; FileAs := Worksheet.Cells.Item[activeRow, 11].Value; bsLfdNr0 := Worksheet.Cells.Item[activeRow, 12].Value; bsAP0 := Worksheet.Cells.Item[activeRow, 13].Value; bsFunktion0 := Worksheet.Cells.Item[activeRow, 14].Value; bsTelNr0 := Worksheet.Cells.Item[activeRow, 15].Value; bsFaxNr0 := Worksheet.Cells.Item[activeRow, 16].Value; bsEMail0 := Worksheet.Cells.Item[activeRow, 17].Value; bsAPCount := 1; isZero := false; isEmptyStr := Worksheet.Cells.Item[activeRow + 1, 12].Value; if (Worksheet.Cells.Item[activeRow + 1, 12].Value <> '0') and (isZero = false) then begin if isEmptyStr <> '' then begin bsLfdNr1 := Worksheet.Cells.Item[activeRow + 1, 12].Value; bsAP1 := Worksheet.Cells.Item[activeRow + 1, 13].Value; bsFunktion1 := Worksheet.Cells.Item[activeRow + 1, 14].Value; bsTelNr1 := Worksheet.Cells.Item[activeRow + 1, 15].Value; bsFaxNr1 := Worksheet.Cells.Item[activeRow + 1, 16].Value; bsEMail1 := Worksheet.Cells.Item[activeRow + 1, 17].Value; bsAPCount := 2; isZero := true; end; end; isEmptyStr := Worksheet.Cells.Item[activeRow + 2, 12].Value; if (Worksheet.Cells.Item[activeRow + 2, 12].Value <> '0') and (isZero = true) then begin if isEmptyStr <> '' then begin bsLfdNr2 := Worksheet.Cells.Item[activeRow + 2, 12].Value; bsAP2 := Worksheet.Cells.Item[activeRow + 2, 13].Value; bsFunktion2 := Worksheet.Cells.Item[activeRow + 2, 14].Value; bsTelNr2 := Worksheet.Cells.Item[activeRow + 2, 15].Value; bsFaxNr2 := Worksheet.Cells.Item[activeRow + 2, 16].Value; bsEMail2 := Worksheet.Cells.Item[activeRow + 2, 17].Value; bsAPCount := 3; isZero := true; end else begin isZero := false; end; end else begin isZero := false; end; isEmptyStr := Worksheet.Cells.Item[activeRow + 3, 12].Value; if (Worksheet.Cells.Item[activeRow + 3, 12].Value <> '0') and (isZero = true) then begin if isEmptyStr <> '' then begin bsLfdNr3 := Worksheet.Cells.Item[activeRow + 3, 12].Value; bsAP3 := Worksheet.Cells.Item[activeRow + 3, 13].Value; bsFunktion3 := Worksheet.Cells.Item[activeRow + 3, 14].Value; bsTelNr3 := Worksheet.Cells.Item[activeRow + 3, 15].Value; bsFaxNr3 := Worksheet.Cells.Item[activeRow + 3, 16].Value; bsEMail3 := Worksheet.Cells.Item[activeRow + 3, 17].Value; bsAPCount := 4; isZero := true; end else begin isZero := false; end; end else begin isZero := false; end; isEmptyStr := Worksheet.Cells.Item[activeRow + 4, 12].Value; if (Worksheet.Cells.Item[activeRow + 4, 12].Value <> '0') and (isZero = true) then begin if isEmptyStr <> '' then begin bsLfdNr4 := Worksheet.Cells.Item[activeRow + 4, 12].Value; bsAP4 := Worksheet.Cells.Item[activeRow + 4, 13].Value; bsFunktion4 := Worksheet.Cells.Item[activeRow + 4, 14].Value; bsTelNr4 := Worksheet.Cells.Item[activeRow + 4, 15].Value; bsFaxNr4 := Worksheet.Cells.Item[activeRow + 4, 16].Value; bsEMail4 := Worksheet.Cells.Item[activeRow + 4, 17].Value; bsAPCount := 5; end; end; end;
Delphi-Quellcode:
Hier stoße ich jetzt natürlich auf das Problem, dass ich nicht für jeden Schleifendurchlauf die Variablen(also für den zweiten Schleifendurchlauf müsste ich die Variablen bsLfdNr2, bsAP2, bsFunktion2 usw. nehmen) die Variablen nehmen kann ich brauch :D Ich denke mir das so das ich die Variablen mit Hilfe der Schleifenvariable ansprechen will aber das funktioniert natürlich nicht :(
procedure TKontakt.FillProbs(WorkSheet: _WorkSheet; activeRow : Integer;
APCount, FillCount, lastActiveRow : Integer; isHeader : Boolean); var isZero : Boolean; isEmptyStr : String; begin if isHeader and (FillCount <= 1) then begin inc(activeRow); activeRow := activeRow + APCount; end else begin activeRow := lastActiveRow + APCount; end; FLastActiveRow := activeRow; KndNr := Worksheet.Cells.Item[activeRow, 1].Value; CompanyName := Worksheet.Cells.Item[activeRow, 2].Value; FullName := Worksheet.Cells.Item[activeRow, 3].Value; BusinessAdressStreet := Worksheet.Cells.Item[activeRow, 4].Value; BusinessAddressPostalCode := Worksheet.Cells.Item[activeRow, 5].Value; BusinessAddressCity := Worksheet.Cells.Item[activeRow, 6].Value; BusinessTelephoneNumber := Worksheet.Cells.Item[activeRow, 7].Value; BusinessFaxNumber := Worksheet.Cells.Item[activeRow, 8].Value; EmailAddress := Worksheet.Cells.Item[activeRow, 9].Value; BusinessHomePage := Worksheet.Cells.Item[activeRow, 10].Value; FileAs := Worksheet.Cells.Item[activeRow, 11].Value; bsLfdNr0 := Worksheet.Cells.Item[activeRow, 12].Value; bsAP0 := Worksheet.Cells.Item[activeRow, 13].Value; bsFunktion0 := Worksheet.Cells.Item[activeRow, 14].Value; bsTelNr0 := Worksheet.Cells.Item[activeRow, 15].Value; bsFaxNr0 := Worksheet.Cells.Item[activeRow, 16].Value; bsEMail0 := Worksheet.Cells.Item[activeRow, 17].Value; bsAPCount := 1; isZero := false; isEmptyStr := Worksheet.Cells.Item[activeRow + 1, 12].Value; for i := 0 to X begin if (Worksheet.Cells.Item[activeRow + i, 12].Value <> '0') and (isZero = false) then begin if isEmptyStr <> '' then begin bsLfdNr1 := Worksheet.Cells.Item[activeRow + i, 12].Value; bsAP1 := Worksheet.Cells.Item[activeRow + i, 13].Value; bsFunktion1 := Worksheet.Cells.Item[activeRow + i, 14].Value; bsTelNr1 := Worksheet.Cells.Item[activeRow + i, 15].Value; bsFaxNr1 := Worksheet.Cells.Item[activeRow + i, 16].Value; bsEMail1 := Worksheet.Cells.Item[activeRow + i, 17].Value; bsAPCount := i + 1; isZero := true; end; end; end; end; Habe dann später irgendwie an ein Array mit Variablen gedacht, geht das? :D Oder wie löst ihr das Problem? hatte das Problem früher schon oft aber bin immer irgendwie drum herum gekommen nur jetzt weiß ich nicht wie ich das verwirklichen kann? Danke für alle hilfreichen Antworten, ich steh echt vor einer Mauer :( VG Alex |
Re: Array mit Variablen?
Guck dir mal dynamische Arrays und
![]() |
Re: Array mit Variablen?
Der erste Schritt wäre das Zusammenfassen der Informationen zu einer Struktur:
Delphi-Quellcode:
Diesen Record kann man in einem Array of TPersonContact oder einer Liste (Ableitung von TList) speichern.
TPersonContact = record
Funktion : string; // z.B. Leiter der EDV Tel: string; Fax: string; EMail : string; end; Wenn du schlau bist, dann bleibst du nicht bei einem Record stehen, sondern machst gleich eine Klasse daraus.
Delphi-Quellcode:
Dann kannst du nämlich auch Methoden hinzufügen.
TPersonContact = class(TObject)
public procedure ReadFromWorksheet(sheet:Worksheet; row, col:integer); property Funktion : string; // z.B. Leiter der EDV property Tel: string; property Fax: string; property EMail : string; end; Die Methode ReadFromWorksheet würde die Daten aus dem übergebenen Worksheet lesen; beginnend ab der Zelle, die mit row und col angesprochen wird. Die Objekte der Klasse TPersonContact würde man dann in einer TObjectList speichern. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:15 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-2025 by Thomas Breitkreuz