Makros für csv Listen- automatische Spaltenänderung
Moderator: Moderatoren
Makros für csv Listen- automatische Spaltenänderung
Hallo zusammen,
Ich bin ein absoluter Neuling auf dem Gebiet der Makros, möchte es aber möglichst schnell und effizient lernen. Ich hoffe, Ihr könnt mir dazu eine Hilfestellung bieten.
Momentan stehe ich vor folgendem Problem:
Ich bin nebenberuflich selbstständig und bekomme von meinen Lieferanten regelmäßig Produktlisten(.csv) mit 15-21 Spalten zugesandt. Das Besondere daran ist, dass eine Spalte existiert, die sich "Produktkategorie" nennt. Entnommen wird diese Kategorisierung von den entsprechenden Internetseiten. Leider passen diese vorgegeben Kategorien teilweise überhaupt nicht zu meiner Internetseite.
Bislang habe ich alles manuell geändert und teilweise gelöscht und somit meine Wissenslücke bzgl. der Programmierung von Makros umgehen können, allerdings werden die Updateintervalle der Listen immer kürzer und zeitgleich immer umfangreicher. Aus diesem Grund wollte ich mich informieren, ob es technisch umsetzbar ist ein entsprechendes Makro zu basteln?
Das Makro müsste in meinem Falle zwei Probleme gleichzeitig lösen können:
1. Die automatisierte Änderung von Produktkategorien.
Beispiel : Lieferant A liefert eine CSV-Datei. Eine Kategorie benennt er u.a. "woman>shoes>sneakers". Ich hingegen möchte es in "Frauen>Schuhe>Sneakers" umbenennen, da ich nur deutsche Kategorien auf meiner Internetseite angelegt habe.
2. Die Löschung von ganzen Zeilen wenn eine bestimmte Kategorie hinterlegt ist.
Beispiel: Lieferant A liefert eine CSV-liste. Neben den Produkten, die auch auf meiner Internetseite vertrieben werden sollen (z. B. Schuhe) beinhaltet die Liste Kategorien und Artikel, die ich nicht anbieten möcht(z. B. Klamotten) .
Wie schaffe ich es, dass die Artikel automatisch aus der Liste gelöscht werden?
Ich bedanke mich vorab für eure Hilfe.
Liebe Grüße
Jenny
Ich bin ein absoluter Neuling auf dem Gebiet der Makros, möchte es aber möglichst schnell und effizient lernen. Ich hoffe, Ihr könnt mir dazu eine Hilfestellung bieten.
Momentan stehe ich vor folgendem Problem:
Ich bin nebenberuflich selbstständig und bekomme von meinen Lieferanten regelmäßig Produktlisten(.csv) mit 15-21 Spalten zugesandt. Das Besondere daran ist, dass eine Spalte existiert, die sich "Produktkategorie" nennt. Entnommen wird diese Kategorisierung von den entsprechenden Internetseiten. Leider passen diese vorgegeben Kategorien teilweise überhaupt nicht zu meiner Internetseite.
Bislang habe ich alles manuell geändert und teilweise gelöscht und somit meine Wissenslücke bzgl. der Programmierung von Makros umgehen können, allerdings werden die Updateintervalle der Listen immer kürzer und zeitgleich immer umfangreicher. Aus diesem Grund wollte ich mich informieren, ob es technisch umsetzbar ist ein entsprechendes Makro zu basteln?
Das Makro müsste in meinem Falle zwei Probleme gleichzeitig lösen können:
1. Die automatisierte Änderung von Produktkategorien.
Beispiel : Lieferant A liefert eine CSV-Datei. Eine Kategorie benennt er u.a. "woman>shoes>sneakers". Ich hingegen möchte es in "Frauen>Schuhe>Sneakers" umbenennen, da ich nur deutsche Kategorien auf meiner Internetseite angelegt habe.
2. Die Löschung von ganzen Zeilen wenn eine bestimmte Kategorie hinterlegt ist.
Beispiel: Lieferant A liefert eine CSV-liste. Neben den Produkten, die auch auf meiner Internetseite vertrieben werden sollen (z. B. Schuhe) beinhaltet die Liste Kategorien und Artikel, die ich nicht anbieten möcht(z. B. Klamotten) .
Wie schaffe ich es, dass die Artikel automatisch aus der Liste gelöscht werden?
Ich bedanke mich vorab für eure Hilfe.
Liebe Grüße
Jenny
Re: Makros für csv Listen- automatische Spaltenänderung
Hallo zusammen,
ich konnte mein Problem bereits teilweise lösen und weiß mittlerweile, wie ich mit einer Makro Kategorien umbenennen kann.
Nun bleibt für mich immer noch die Frage, wie ich ganze Zeilen löschen kann, wenn eine Zelle eine definierte Bedingung erfüllt.
Beispiel:
In Spalte AA befindet sich meine neue Kategorie:
In AA1 und AA10 ist der Zellwert "bitte löschen" hinterlegt.
Das Ziel soll sein, dass beim Ausführen der Makro jede Zeile gelöscht wird, die den Wert "Bitte löschen" ausweist.
Leider bin ich mit der Programmierung der Makro etwas überfordert.
Kann mir einer weiterhelfen?
Ich bedanke mich im Voraus.
Liebe Grüße
Jenny
ich konnte mein Problem bereits teilweise lösen und weiß mittlerweile, wie ich mit einer Makro Kategorien umbenennen kann.
Nun bleibt für mich immer noch die Frage, wie ich ganze Zeilen löschen kann, wenn eine Zelle eine definierte Bedingung erfüllt.
Beispiel:
In Spalte AA befindet sich meine neue Kategorie:
In AA1 und AA10 ist der Zellwert "bitte löschen" hinterlegt.
Das Ziel soll sein, dass beim Ausführen der Makro jede Zeile gelöscht wird, die den Wert "Bitte löschen" ausweist.
Leider bin ich mit der Programmierung der Makro etwas überfordert.
Kann mir einer weiterhelfen?
Ich bedanke mich im Voraus.
Liebe Grüße
Jenny
Re: Makros für csv Listen- automatische Spaltenänderung
Hi,
weil heute so schönes Wetter war:Gruß R
weil heute so schönes Wetter war:
Code: Alles auswählen
sub Delete_Rows
oSheet = ThisComponent.Sheets.getbyName("Tabelle1")
oCursor = oSheet.CreateCursor
oCursor.gotoEndOfUsedArea(false)
nEndrow = oCursor.Rangeaddress.EndRow
for i = nEndrow to 0 step - 1
oCell = oSheet.getcellbyPosition(26,i)'26 entspricht Spalte AA
if oCell.string = "Bitte löschen" then
osheet.rows.removeByIndex(i,1)
endif
next i
end sub
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 10: AOO, LO Linux Mint: AOO, LO
Re: Makros für csv Listen- automatische Spaltenänderung
Hallo R,
danke für deine schnelle Antwort.
Ich habe hierzu nochmal eine Frage:
Würde ich jetzt die Makro auf Spalte B anwenden wollen, weil meine Kategorien in Spalte B hinterlegt sind, müsste ich logischerweise folgende Zeile ändern oder?:
oCell = oSheet.getcellbyPosition(2,i)'2 entspricht Spalte B
Danke im Voraus.
danke für deine schnelle Antwort.
Code: Alles auswählen
sub Delete_Rows
oSheet = ThisComponent.Sheets.getbyName("Tabelle1")
oCursor = oSheet.CreateCursor
oCursor.gotoEndOfUsedArea(false)
nEndrow = oCursor.Rangeaddress.EndRow
for i = nEndrow to 0 step - 1
oCell = oSheet.getcellbyPosition(26,i)'26 entspricht Spalte AA
if oCell.string = "Bitte löschen" then
osheet.rows.removeByIndex(i,1)
endif
next i
end sub
Würde ich jetzt die Makro auf Spalte B anwenden wollen, weil meine Kategorien in Spalte B hinterlegt sind, müsste ich logischerweise folgende Zeile ändern oder?:
oCell = oSheet.getcellbyPosition(2,i)'2 entspricht Spalte B
Danke im Voraus.
Zuletzt geändert von JDaria am So, 07.02.2016 12:22, insgesamt 1-mal geändert.
Re: Makros für csv Listen- automatische Spaltenänderung
Nicht ganz,
0 ist Spalte A, 1 ist B, 2 ist C usw.
Gruß R
0 ist Spalte A, 1 ist B, 2 ist C usw.
Gruß R
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 10: AOO, LO Linux Mint: AOO, LO
Re: Makros für csv Listen- automatische Spaltenänderung
Probier es aus!
R
R
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 10: AOO, LO Linux Mint: AOO, LO
Re: Makros für csv Listen- automatische Spaltenänderung
Hallo
Wenn die Formeln tatsächlich den Text`Bitte löschen` zurückgeben, dann funktioniert das auch...
Karolus
Wenn die Formeln tatsächlich den Text`Bitte löschen` zurückgeben, dann funktioniert das auch...
Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Makros für csv Listen- automatische Spaltenänderung
... wenn man nicht immer "rechnen" will, welcher Index nun einer Spalte zugeordnet ist, dann nimmt man eine Funktion, die einem das Gesuchte liefert:F3K Total hat geschrieben:0 ist Spalte A, 1 ist B, 2 ist C usw.
Code: Alles auswählen
FUNCTION ColumnIndexFromName( sName as String )
' gibt den Index der Spalte zurück
zelle = ThisComponent.Sheets.getByIndex(0).getCellRangeByName( sName & "1" )
ColumnIndexFromName = zelle.CellAddress.Column
END FUNCTION
Code: Alles auswählen
oCell = oSheet.getcellbyPosition( ColumnIndexFromName("AA"),i )
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Makros für csv Listen- automatische Spaltenänderung
Hallo R,
ich habe die Makro noch etwas erweitert:
Interpretiere ich es richtig, dass die Makro die Tabelle insgesamt zweimal durchgeht( zunächst um alle Zeilen zu löschen, die das Wort "DELETE" in der AA-Spalte, um anschließend selbiges für "'#NV" zu tun)? Ich hatte bereits versucht, beide WENN-Bedingungen untereinander zu schreiben, allerdings hat die Makro dann nicht mehr funktioniert:
Bezüglich deiner Aussage, ich solle es einfach ausprobieren, hatte ich einen kleinen Fehler drinnen, weshalb die Makro nicht ausführbar gewesen ist. Nun funktioniert alles, wie es soll.
@komma4: Danke für die Erläuterung, ich habe mir das gleich mal abgespeichert und werde damit mal rumspielen .
ich habe die Makro noch etwas erweitert:
Code: Alles auswählen
sub Delete_Rows
oSheet = ThisComponent.Sheets.getbyName("Tabelle1")
oCursor = oSheet.CreateCursor
oCursor.gotoEndOfUsedArea(false)
nEndrow = oCursor.Rangeaddress.EndRow
for i = nEndrow to 0 step - 1
oCell = oSheet.getcellbyPosition(26,i)
if oCell.string = "DELETE" then
osheet.rows.removeByIndex(i,1)
endif
next i
oSheet = ThisComponent.Sheets.getbyName("Tabelle1")
oCursor = oSheet.CreateCursor
oCursor.gotoEndOfUsedArea(false)
nEndrow = oCursor.Rangeaddress.EndRow
for i = nEndrow to 0 step - 1
oCell = oSheet.getcellbyPosition(26,i)
if oCell.string = "#NV" then
osheet.rows.removeByIndex(i,1)
endif
next i
end sub
Ich vermute mal, dass an meiner Herangehensweise etwas falsch ist.sub Delete_Rows
oSheet = ThisComponent.Sheets.getbyName("Tabelle1")
oCursor = oSheet.CreateCursor
oCursor.gotoEndOfUsedArea(false)
nEndrow = oCursor.Rangeaddress.EndRow
for i = nEndrow to 0 step - 1
oCell = oSheet.getcellbyPosition(26,i)
if oCell.string = "DELETE"
if oCell.string = "#NV" then
osheet.rows.removeByIndex(i,1)
endif
next i
end sub
Bezüglich deiner Aussage, ich solle es einfach ausprobieren, hatte ich einen kleinen Fehler drinnen, weshalb die Makro nicht ausführbar gewesen ist. Nun funktioniert alles, wie es soll.
@komma4: Danke für die Erläuterung, ich habe mir das gleich mal abgespeichert und werde damit mal rumspielen .
Zuletzt geändert von JDaria am So, 07.02.2016 12:23, insgesamt 1-mal geändert.
Re: Makros für csv Listen- automatische Spaltenänderung
Ich möchte deinen Eifer auf keinen Fall bremsen, sagen wir mal so, es gibt noch Potenzial nach oben,Daria hat geschrieben:Ah ok super, jetzt begreife ich auch langsam, wie die Programmierung der Makros funktioniert
Hier gibt es gute Literaturhinweise zur Programmierung in Starbasic.
StarBasic FAQ von Dannenhöfer ist ein guter Einstieg.
Es wäre schön, wenn du deinen letzten Beitrag noch einmal editieren würdest und die Programmcodes in Code Tags setzen würdest. Dazu brauchst du den relevanten Text während des Editierens nur zu markieren und dann oben die Taste code anklicken.
Dann sieht es so aus:
Code: Alles auswählen
5+4 = 9
Code: Alles auswählen
sub Delete_Rows
oSheet = ThisComponent.Sheets.getbyName("Tabelle1")
oCursor = oSheet.CreateCursor
oCursor.gotoEndOfUsedArea(false)
nEndrow = oCursor.Rangeaddress.EndRow
for i = nEndrow to 0 step - 1
oCell = oSheet.getcellbyPosition(26,i)'26 entspricht Spalte AA
if (oCell.string = "DELETE" ) OR (oCell.string = "#NV") then
osheet.rows.removeByIndex(i,1)
endif
next i
end sub
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 10: AOO, LO Linux Mint: AOO, LO
Re: Makros für csv Listen- automatische Spaltenänderung
Hallo R,
ich werde mal reinschauen. Vielen DanK!
ich werde mal reinschauen. Vielen DanK!