[gelöst]Probleme mit einem Array

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

pcdirk91
***
Beiträge: 54
Registriert: Fr, 15.11.2013 18:02
Wohnort: Fürth/bay

[gelöst]Probleme mit einem Array

Beitrag von pcdirk91 »

Hallo Leute,
ich habe wieder mal ein Problem bei dem ich auf Eure Hilfe hoffe.
Grundgedanke:
Ich habe in der Tabelle n-Materialien angelegt. Jetzt möchte ich eine Liste in einem Dialog erzeugen die mir spaltenweise alle Materialien auflistet.
die Spalten beinhalten die MaterialBezeichnung die Materialnummer und die material Stärke event. noch die ID des Materials
Im Makro Kochbuch habe ich auf der Seite 149 ein Beispiel gefunden was mir zusagt.
Da aber dort ein Festgelegtes Array definiert im Code steht Ich aber nicht wei9 ob ich 5 Materialien oder 30-Materialien angelegt habe muss ich mir selber ein Array bauen das alle angelegten Materialien beinhaltet.
Unter dem Code Makro Kochbuch die ich asl Code anhänge funktioniert das Ganze so wie ich es mir vorstellen
Unter dem Code Mein Versuch bekomme ich zar die Liste aber immer nur die erste Spalte .
Kann mir jemand sagen was ich hier verkehrt maxhe
Ich hänge auch eine Beispieldatei an
Code aus Makro Kochbuch Seite 149

Code: Alles auswählen

Sub MakroKochBuch
dim aListe()
dim aFeldlen()
dim sSpTr as string
aListe = Array(Array("Balsaholz","Balsaholz_02"," 2mm"), _
			   Array("Balsaholz","Balsaholz_04"," 4mm"), _
			   Array("Furnierplatte","Furnierplatte_04"," 4mm"), _
			   Array("Furnierplatte","Furnierplatte_06"," 6mm"), _
			   Array("Furnierplatte","Furnierplatte_08","10mm"))

aFeldLen = array(27,27,7)
DialogLibraries.loadLibrary("Standard")
oDlg = createUnoDialog(DialogLibraries.Standard.dlg_Liste) 'Dialog erzeugen
oDlg.getControl("List_1").model.stringItemList = ListeSymAufbereiten(aListe, aFeldlen(), "", 0)
if NOT (oDlg.execute() = 1) then exit sub
end sub
function ListeSymAufbereiten(aListalt, aFeldlen(), sSpTr as string, iSpTrTyp as integer )

dim aListe(), aDSalt()
dim sZeile as string, n%, j%, i%, sTxt as string
'iSpTrTyp= 5
if uBound(aListalt()) > -1 then redim aListe(uBound(aListalt()))
for i = 0 to uBound(aListe())
aDSalt = aListalt(i)
sZeile = ""
for j = 0 to uBound(aFeldLen())
n = aFeldLen(j)
sTxt = aDSalt(j)
if len(sTxt) > n-1 then
if NOT (len(sTxt) <= 3) then sTxt = left(sTxt, n-3) & ".. "
else
sTxt = sTxt & Space(n-len(stxt))
end if
sZeile = sZeile & sTxt
select case iSptrTyp
case 1 'erste Spalte trennen
if (j=0) then sZeile = sZeile & sSpTr
case 2 'letze Spalte trenen
if (j=uBound(aFeldLen())-1) then sZeile = sZeile & sSpTr
case 5 'alle Spalten Trennen
if NOT (j = uBound(aFeldLen())) then sZeile = sZeile & sSpTr
end select
next j
aListe(i) = sZeile
next i
ListeSymAufbereiten = aListe()
end function
Mein Versuch:

Code: Alles auswählen

sub MeinVersuch
dim aListe()
dim aFeldlen()
oDoc=Thiscomponent
Oview=odoc.currentcontroller
mySheet = ThisComponent.Sheets.getByName("Material")                                    ' Tabelle in die Variable MySheet aufnehmen    
oView.setActiveSheet(mySheet)                                                 ' Die in der Variablen TBlatt01 definierte Tabelle ("Hintergrund") aktivieren
anzMat = mysheet.getCellRangeByName("E1").Value                            ' Den Zahlenwert aus der Zelle E2 in die Variable anzMat aufnehmen
Zeile=4
dim Data(anzMat-1,2)
for i=0 to 1
'Teil in dem ich versuche die stärke unterinander zu bekommen (Wenn Stärke einstellig ist....)  
'MatBez=mysheet.getCellRangeByName("C"+Zeile).String
'MatNr=mysheet.getCellRangeByName("D"+Zeile).String
'MatSt=mysheet.getCellRangeByName("E"+Zeile).Value
'If MatSt<=9 then
 '   MatSt= " "+ Str(MatSt)+"mm"
'else
'    MatSt= Str(MatSt)+"mm"
'end If
'wenn der vorheige Teil funzt soll hier statt mysheet....   "C"+Zeile).string  nur der Variablenname  MatBezstehen 

Data(i,0)=mysheet.getCellRangeByName("C"+Zeile).String
Data(i,1)=mysheet.getCellRangeByName("D"+Zeile).String
Data(i,2)=mysheet.getCellRangeByName("E"+Zeile).String
Zeile=Zeile+1
next i
aFeldLen = array(27, 27,5)
aListe=data()

DialogLibraries.loadLibrary("Standard")
oDlg = createUnoDialog(DialogLibraries.Standard.dlg_Liste) 'Dialog erzeugen
oDlg.getControl("List_1").model.stringItemList = ListeSymAufbereiten(aListe, aFeldlen(), "", 0)
if NOT (oDlg.execute() = 1) then exit sub
[attachment=0]test.ods[/attachment]
End Sub

function ListeSymAufbereiten(aListalt, aFeldlen(), sSpTr as string, iSpTrTyp as integer )
dim aListe(), aDSalt()
dim sZeile as string, n%, j%, i%, sTxt as string
'iSpTrTyp= 5
if uBound(aListalt()) > -1 then redim aListe(uBound(aListalt()))
for i = 0 to uBound(aListe())
aDSalt = aListalt(i)
sZeile = ""
for j = 0 to uBound(aFeldLen())
n = aFeldLen(j)
sTxt = aDSalt(j)
if len(sTxt) > n-1 then
if NOT (len(sTxt) <= 3) then sTxt = left(sTxt, n-3) & ".. "
else
sTxt = sTxt & Space(n-len(stxt))
end if
sZeile = sZeile & sTxt
select case iSptrTyp
case 1 'erste Spalte trennen
if (j=0) then sZeile = sZeile & sSpTr
case 2 'letze Spalte trenen
if (j=uBound(aFeldLen())-1) then sZeile = sZeile & sSpTr
case 5 'alle Spalten Trennen
if NOT (j = uBound(aFeldLen())) then sZeile = sZeile & sSpTr
end select
next j
aListe(i) = sZeile
next i
ListeSymAufbereiten = aListe()
end function
Vielleicht hat ja einer von euch eine Idee oder Besser noch einen Lösungsansatz. Meine Überlegung ist das ich in der Function einen Fehler habe. Aber das vermute ich nur
also schon mal vielen Dank im Voraus für eure Hilfe
Gruß Dirk
Dateianhänge
test.ods
(61.04 KiB) 91-mal heruntergeladen
Zuletzt geändert von pcdirk91 am Fr, 15.03.2019 08:16, insgesamt 1-mal geändert.
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Probleme mit einem Array

Beitrag von Stephan »

Wenn die Werte aus der Calc-Tabelle gelesen werden sollen geht das mit .getDataArray() viel kürzer:

Code: Alles auswählen

sub MeinVersuch
dim aListe()
dim aFeldlen()
oDoc=Thiscomponent
Oview=odoc.currentcontroller
mySheet = ThisComponent.Sheets.getByName("Material")                                    ' Tabelle in die Variable MySheet aufnehmen    
oView.setActiveSheet(mySheet)                                                 ' Die in der Variablen TBlatt01 definierte Tabelle ("Hintergrund") aktivieren
anzMat = mysheet.getCellRangeByName("E1").Value                            ' Den Zahlenwert aus der Zelle E2 in die Variable anzMat aufnehmen
aFeldLen = array(27, 27,5)
aListe =  mysheet.getCellRangeByPosition(2,3,4,2+anzMat).getDataArray()

For i = 0 To UBOUND(aListe())
	tmp = aListe(i)
	tmp(2) = tmp(2) & " mm"
	aListe(i) = tmp
Next i

DialogLibraries.loadLibrary("Standard")oDlg = createUnoDialog(DialogLibraries.Standard.dlg_Liste) 'Dialog erzeugen
oDlg.getControl("List_1").model.stringItemList = ListeSymAufbereiten(aListe, aFeldlen(), "", 0)
if NOT (oDlg.execute() = 1) then exit sub

End Sub

Gruß
Stephan

P.S.
Vielleicht schaust Du Dir auch einmal die Möglichkeiten des Grid-Steuerelements an, dann musst Du nicht mit der Listbox und Fix-Font arbeiten. Hier ein Codeschnipsel als Einstieg:
https://forum.openoffice.org/en/forum/v ... 96#p365635
Dateianhänge
test-geändert.ods
(62.11 KiB) 99-mal heruntergeladen
pcdirk91
***
Beiträge: 54
Registriert: Fr, 15.11.2013 18:02
Wohnort: Fürth/bay

Re: Probleme mit einem Array

Beitrag von pcdirk91 »

Hi stepan,
sach maaaaaaaaaaalll . Einmal lesen; zweimal Hand ausschütteln; und drittens die Lösung verkünden.
Wenn die Werte aus der Calc-Tabelle gelesen werden sollen geht das mit .getDataArray() viel kürzer:
Hatte ich schon mal probiert aber leider nicht hinbekommen. muß mir Deine Lösung Morgen früh genauer ansehen. Vielleicht verstehe ich dann meinen Fehler und die Variante mit .getDataArray()
Viele vielen Dank . Es funzt so ie ich es mir gewünscht habe. Vieeeeelen dank
Vielleicht schaust Du Dir auch einmal die Möglichkeiten des Grid-Steuerelements an, dann musst Du nicht mit der Listbox und Fix-Font arbeiten. Hier ein Codeschnipsel als Einstieg:
Das mit dem Grid- Steuerelement schaue ich mir sicher an. Aber nicht mehr heute. Mir qualmt schon der Schädel.

Wollte einfach nur Danke für die Lösung sagen und einen schönen Abend wünschen.
gruß dirk
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Probleme mit einem Array

Beitrag von Stephan »

hier ist Deine Datei mit Grid
Dateianhänge
test-geändert2.ods
(62.51 KiB) 107-mal heruntergeladen
pcdirk91
***
Beiträge: 54
Registriert: Fr, 15.11.2013 18:02
Wohnort: Fürth/bay

Re: Probleme mit einem Array

Beitrag von pcdirk91 »

Hallo Stephan,
habe gesehen das Du noch die Änderung mit dem Grid gestern eingestellt hast . danke dafür. Ganz verstanden wie das genau funktioniert habe ich noch nicht, aber das dauert bei mir etwas.
dennoch eine kleine Frage zum Grid. Gibt es die Möglichkeit die Spalte 3 (Stärke ) ausrichtung echts einzustellen?? wenn ich es richtig verstanden habe ist das Grid ja eine Art Tabelle oder? und in einer Tabelle kann man die Spalten mit Ausrichtung ja formatieren.

Ich hoffe es ist nicht zu unverschämt dich danach zu fragen.

Gruß Dirk
pcdirk91
***
Beiträge: 54
Registriert: Fr, 15.11.2013 18:02
Wohnort: Fürth/bay

Re: Probleme mit einem Array

Beitrag von pcdirk91 »

Hallo Stephan,
vergiss meine vorherige Frage. Ich habe es selber gefunden . es ist Horizontalign.
Danke für deine hilfe und noch einen schönen und erfolgreichen Tag
Gruß Dirk
Antworten