Problem bei führenden Nullen und Verketten

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

Moderator: Moderatoren

Domenico
*
Beiträge: 17
Registriert: Mi, 06.04.2016 12:37
Wohnort: Brandenburg
Kontaktdaten:

Problem bei führenden Nullen und Verketten

Beitrag von Domenico »

Hallo zusammen.

Erst ein mal möchte ich betonen, dass ich seit Tagen nach einer Lösung suche und schon sehr viele Foreneinträge und Tips durchprobiert habe.
Da ich nur sehr selten in SQL und Tabellen programmiere (oder besser, versuche zu programmieren), sind einige Schritte ohne Posting nicht so leicht zu lösen. Übung macht den Meister und Bücher helfen auch nur dann, wenn man genügend Zeit zum Üben hat.

Zum Problem, ich nutze Calc, um für meinen Prestashop einige Artikelvarianten zu generieren und dann per CSV in Prestashop zu importieren.
Da es bis auf die Artikelnummer doch fast immer die gleichen Variantenkombis sind, habe ich es mit einem Makro versucht.
Hier stoße ich schon bei der Formattierung der fortlaufenden Nummern an meine Grenzen.
Generiert werden sollen nach Eingabe der Artikelnummer per "inputbox" die fortlaufenden Artikelnummern für die Variantenkombis.
Beispiel: ABC-001 ABC-002 ABC-003 ...
Laut Googlesuchergebnissen sollte dies an Hand von "art = format(art,"000")" funktionieren.
Es wird aber die Fehlermeldung angezeigt, dass art schon definiert wurde.

Ein weiteren Problem habe ich beim Verketten von Werten.
Hier versuche ich folgendes Ergebnis zu bekommen (Breite 25 cm:0)
Breite wird per "" "Breite" generiert, "25 cm" wird aus array Breite gezogen, ":0" auch aus "".

Ich hänge den Code ein mal an, auch wenn hier noch einiges fehlt, um den Export komplett generieren zu können.
Aber ohne die Lösung kann man den Rest nicht realisieren.

Code: Alles auswählen

Sub Heckscheibe
'Schreibt alle Kombinationsmöglichkeiten der folgenden Arrayeinträge
'in eine Tabelle
DIM art as integer
DIM sku as string
Breite = array("25 cm","30 cm","40 cm","50 cm","60 cm","70 cm","80 cm","100 cm")
Farbe = array("Weiß","Rot","Gelb","Grün","Magenta","Ocean","Hellgrau","Gold","Schwarz")
sku = inputbox ("Bitte Artikelnummer eingeben")
Attr = "Breite:select:0"
Value = "Farbe:select:1"
'k = ermittelt die Anzahl der Kombinationen
k = (ubound(Breite())+1)*(ubound(Farbe())+1)

for n = 1 to k
' = "Breite"+Breite+":0"
ArtNr = sku +"-"+art
' Es werden Werte für den Prestasho Import generiert
	thisComponent.sheets(1).getcellbyposition(1,n).setstring(Attr(b))
	thisComponent.sheets(1).getcellbyposition(2,n).setstring(Value(c))
    thisComponent.sheets(1).getcellbyposition(3,n).setstring("Breite "+Breite+":0"(a))
    thisComponent.sheets(0).getcellbyposition(1,n).setstring(Farbe(b))
    thisComponent.sheets(0).getcellbyposition(2,n).setstring(ArtNr(c))
   b = b + 1
   art = art + 1
   
   if b > ubound(Farbe()) then : a = a + 1 : b = 0 : end if
next n

End Sub
Vielen Dank für eventuelle Tips und einen schönen Tag noch.

Domenico
Domenico
*
Beiträge: 17
Registriert: Mi, 06.04.2016 12:37
Wohnort: Brandenburg
Kontaktdaten:

Re: Problem bei führenden Nullen und Verketten

Beitrag von Domenico »

Hab noch vergessen zu erwähnen, dass die Verkettung ohne ":0" funktioniert.

Code: Alles auswählen

hisComponent.sheets(1).getcellbyposition(3,n).setstring("Breite "+Breite(a))
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Problem bei führenden Nullen und Verketten

Beitrag von Toxitom »

Hey Domenico,

hmm, dein Code ist ein wenig schwer zu verstehen.... aber ein paar Sachen kann ich Dir erläutern:

Deine Artikelnummern funktionieren schon so ähnlich, mit einer Kleinigkeit:

Der Format() Befehl erzeugt einen String (Text) was in Deinem Fall auch problemlos nutzbar ist.

Da Du aber "art" bereits als integer definiert hatest, kannst Du dieser Variable keinen String zuweisen. Daher der Fehler.

Lass einfach diese Zeile weg.

Es reicht die folgende Zeile:

Code: Alles auswählen

ArtNr = sku + "-" + format(art, "000")
Was Du allerdings mit der Zeile anstellen willst entzieht sich meines Verständnisses:

Code: Alles auswählen

thisComponent.sheets(1).getcellbyposition(3,n).setstring("Breite "+Breite+":0"(a))
Insbesondere das (a) das steht irgendwie verloren rum....
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Domenico
*
Beiträge: 17
Registriert: Mi, 06.04.2016 12:37
Wohnort: Brandenburg
Kontaktdaten:

Re: Problem bei führenden Nullen und Verketten

Beitrag von Domenico »

Hallo toxytom,

erst ein mal danke für die Lösung bei den führenden Nullen.

Das mit dem anderen Code wird benötigt, um Daten in eine CSV Vorlage für den Import von Variantenkombinationen zu schreiben und dann die Daten in Prestashop zu importieren.

Code: Alles auswählen

thisComponent.sheets(1).getcellbyposition(3,n).setstring("Breite "+Breite+":0"(a))
Hier wird z. B. folgendes zum Einfügen in der entsprechenden zelle benötigt:
Text: ("Breite ")(Wert aus Array Breite)(":0")
Wenn der Wert aus dem Array als letztes Glied verkettet wird, funktioniert es.
Dieser Wert wird z. B. benötigt, um im Shop der den Array BREITE an Position 0 anzuzeigen.
Andere Werte müssen dann noch in den Code mit einfließen.
Das geht aber erst dann, wenn das Verketten richtig funktioniert.

Gruß

Domenico
Domenico
*
Beiträge: 17
Registriert: Mi, 06.04.2016 12:37
Wohnort: Brandenburg
Kontaktdaten:

Re: Problem bei führenden Nullen und Verketten

Beitrag von Domenico »

Hallo,

ich konnte das letzte Problem lösen.

Wenn man einen Array nutzt, wie bei mir zur Verkettung mit anderen Werten / Strings, dann ist natürlich auch die Angaben des einzufügenden Wertes zu machen.
In meinem Fall wird der Wert aus dem Array (Breite) durch (a) ermittelt.

Code: Alles auswählen

b = b + 1
   art = art + 1
   
   if b > ubound(Farbe()) then : a = a + 1 : b = 0 : end if
Jetzt hat auch die Verkettung mit folgendem Code funktioniert:

Code: Alles auswählen

Value = "Breite " + Breite(a)+":0, "+ Farbe(b) + ":1"
Ich bedanke mich für die Hilfe und werde in Zukunft sicher auch wieder ein mal mitschreiben.

Gruß

Domenico
Antworten