Seite 1 von 1
Makros für csv Listen- automatische Spaltenänderung
Verfasst: Do, 04.02.2016 13:03
von JDaria
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
Re: Makros für csv Listen- automatische Spaltenänderung
Verfasst: Sa, 06.02.2016 17:46
von JDaria
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
Re: Makros für csv Listen- automatische Spaltenänderung
Verfasst: Sa, 06.02.2016 18:14
von F3K Total
Hi,
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
Gruß R
Re: Makros für csv Listen- automatische Spaltenänderung
Verfasst: Sa, 06.02.2016 21:37
von JDaria
Hallo R,
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
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.
Re: Makros für csv Listen- automatische Spaltenänderung
Verfasst: Sa, 06.02.2016 21:56
von F3K Total
Nicht ganz,
0 ist Spalte A, 1 ist B, 2 ist C usw.
Gruß R
Re: Makros für csv Listen- automatische Spaltenänderung
Verfasst: Sa, 06.02.2016 23:01
von F3K Total
Probier es aus!
R
Re: Makros für csv Listen- automatische Spaltenänderung
Verfasst: Sa, 06.02.2016 23:07
von Karolus
Hallo
Wenn die Formeln tatsächlich den Text`Bitte löschen` zurückgeben, dann funktioniert das auch...
Karolus
Re: Makros für csv Listen- automatische Spaltenänderung
Verfasst: Sa, 06.02.2016 23:21
von komma4
F3K Total hat geschrieben:0 ist Spalte A, 1 ist B, 2 ist C usw.
... wenn man nicht immer "rechnen" will, welcher Index nun einer Spalte zugeordnet ist, dann nimmt man eine Funktion, die einem das Gesuchte liefert:
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
Im Code kann dann einfach(er) der Spaltenname verwendet werden:
Code: Alles auswählen
oCell = oSheet.getcellbyPosition( ColumnIndexFromName("AA"),i )
Re: Makros für csv Listen- automatische Spaltenänderung
Verfasst: So, 07.02.2016 11:18
von JDaria
Hallo R,
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
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:
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
Ich vermute mal, dass an meiner Herangehensweise etwas falsch ist.
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

.
Re: Makros für csv Listen- automatische Spaltenänderung
Verfasst: So, 07.02.2016 12:18
von F3K Total
Daria hat geschrieben:Ah ok super, jetzt begreife ich auch langsam, wie die Programmierung der Makros funktioniert
Ich möchte deinen Eifer auf keinen Fall bremsen, sagen wir mal so, es gibt noch Potenzial nach oben,
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:
Nun zu deinem Versuch, so geht es kürzer:
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
Gruß R
Re: Makros für csv Listen- automatische Spaltenänderung
Verfasst: Mo, 08.02.2016 15:10
von JDaria
Hallo R,
ich werde mal reinschauen. Vielen DanK!