Guten Tag
Ich möchte in einer Tabelle (SpalteA) den Text (Werkzeug, Hersteller, Modell, Grösse etc.), der durch Komma getrennt ist (a la Excel) in andere Spalten verschieben.
Da ich von Programmieren Null Ahnung habe habe ich in den Treads gesucht und bin mit untem folgenden Makro fündig geworden.
Das Makro funktioniert (Text mittels Komma in andere Spalten aufteilen) -> ist aus einem Tread kopiert -> wie muss ich nun die Schleife machen, respektive wie sieht die Schleife aus, damit ich die ganze Tabelle und nicht nur eine Zeile abarbeiten kann??
Beim markieren mehrerer Zeilen erscheint ein "Laufzeitfehler" -> was immer das auch heissen mag javascript:emoticon(':(')
Sad
Sad
Könnte mir jemand behilflich sein??
---
Sub Main
trz="," ' Trennzeichen definieren
oDoc=thisComponent
' Werte einlesen
'aktive Zelle erhalten
oCelle=oDoc.getCurrentSelection()
'Inhalt der aktiven Zelle
inhalt=oCelle.getstring
'werte auf Array aufteilen am Trenner
atext=split(inhalt, trz)
'Position der aktiven Zelle erhalten
oZellPos=oCelle.getCellAddress()
'indexe der Reihe, Spalte und der Tabelle
reihe=oZellPos.row
spalte=oZellPos.column
tabelle=oZellPos.sheet
' Werte ausgeben
' aktives Tabellenblatt erhalten
oSheet=oDoc.sheets(tabelle)
'Schleife über alle Array-Inhalte
'Inhalte in Zellen aktive Zelle und rechts daneben
'schreiben. Die Funktion trim() entfernt dabei
'Leerzeichen vor und hinter den jeweiligen Texteinträgen
for i=lBound(atext()) to ubound(atext())
oSheet.getCellByPosition(spalte+i,reihe).string=trim(atext(i))
next
End Sub
---
Danke schon im voraus für Eure Bemühungen
Schleife in Makros einbauen
Moderator: Moderatoren
Schleife in Makros einbauen
Besten Dank
Virob
ein OOo Neuling
Virob
ein OOo Neuling
Hallo Virob,
(so trifft man sich wieder
)
Bevor wir an das Makro gehen, zunächst ein paar andere Fragen:
Wo kommen denn die Daten her? Wenn du schreibst, dass in Spalte A die Daten (zeilenweise?) drinstehen, mit Kommas seperiert, a la Excel?
Wenn du diese Daten nämlich via Import aus einer Datei selbst einlädst, dann könntest du diese doch direkt beim Import trennen lassen. Wenn du eine Textdatei (*.txt) liest, so benenne diese vorher um -> in *.csv. Jetzt öffnet sich ein Importdialog und du kannst eine Trennung in verschiedene Spalten vornehmen.
2. Frage: Wie viele Daten stehen in Spalte A? Und welche willst du konvertieren? Alle? Nur die markierten?
Gib mir hierüber noch Auskunft, dann stellen wir das Makro zusammen. Ach ja, wie willst du das Makro starten? durch einen Button im Dokument?
Bis denn
Thomas
(so trifft man sich wieder

Bevor wir an das Makro gehen, zunächst ein paar andere Fragen:
Wo kommen denn die Daten her? Wenn du schreibst, dass in Spalte A die Daten (zeilenweise?) drinstehen, mit Kommas seperiert, a la Excel?
Wenn du diese Daten nämlich via Import aus einer Datei selbst einlädst, dann könntest du diese doch direkt beim Import trennen lassen. Wenn du eine Textdatei (*.txt) liest, so benenne diese vorher um -> in *.csv. Jetzt öffnet sich ein Importdialog und du kannst eine Trennung in verschiedene Spalten vornehmen.
2. Frage: Wie viele Daten stehen in Spalte A? Und welche willst du konvertieren? Alle? Nur die markierten?
Gib mir hierüber noch Auskunft, dann stellen wir das Makro zusammen. Ach ja, wie willst du das Makro starten? durch einen Button im Dokument?
Bis denn
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Schleife in Makro einbauen
Hallo Thomas,
... ja so schnell geht das - besten Dank
Wir haben teilweise Daten (von Lieferanten etc.) die sind wirr geordnet - mal mit Komma getrennt, mal mit Semikolon etc.
Mal in Spalte A, mal in B -> je nachdem wer diese Daten (Lieferantenseits) in einer Tabelle aufgenommen hat.
Mit importieren *.csv klappt es in der Regel -> aber beim kurchkämmen der Daten wäre ich schon froh, wenn ich dies in der "offenen Lösung" machen könnte. Zellen markieren und Makro die Arbeit übernehmen lassen.
Ganz komfortabel wäre es mit einem Button -> aber daran wage ich ja nicht zu denken.
Je nach Datenmenge -(Import) kann dies schon mal 1'000 Artikel sein, die
durchforstet werden müssen -> und da wäre für mich ein solches Makro schon hilfreich.
Habe ich Dir die Sachlage verständlich erklärt??
Danke für Deine Bemühungen
... ja so schnell geht das - besten Dank
Wir haben teilweise Daten (von Lieferanten etc.) die sind wirr geordnet - mal mit Komma getrennt, mal mit Semikolon etc.
Mal in Spalte A, mal in B -> je nachdem wer diese Daten (Lieferantenseits) in einer Tabelle aufgenommen hat.
Mit importieren *.csv klappt es in der Regel -> aber beim kurchkämmen der Daten wäre ich schon froh, wenn ich dies in der "offenen Lösung" machen könnte. Zellen markieren und Makro die Arbeit übernehmen lassen.
Ganz komfortabel wäre es mit einem Button -> aber daran wage ich ja nicht zu denken.
Je nach Datenmenge -(Import) kann dies schon mal 1'000 Artikel sein, die
durchforstet werden müssen -> und da wäre für mich ein solches Makro schon hilfreich.
Habe ich Dir die Sachlage verständlich erklärt??
Danke für Deine Bemühungen
Besten Dank
Virob
ein OOo Neuling
Virob
ein OOo Neuling
Hey Virob,
Die erste Problematik ist, zu erkennen, was gerade markiert ist. Ich gehe mal von zwei Möglichkeiten aus:
1. eine einzelne Zelle -> dann wird nur dieser Text umgewandelt.
2. ein (zusammenhängender) Zellbereich -> jetzt werden alle Texte der ersten Spalte umgewandelt.
Den Umwandlungsprozess hast du ja schon gehabt, den hab ich soweit übernommen. Der Übersicht bleibt dies eine eigenständige Prozedur. Du startest das Makro "Selection", dann sollte es funktionieren:
Hiermit hast du nun die Zell-Adressen(Indices) und kannst weiterarbeiten. Die Funktion, die benötigt wird, heisst "Textsplitten()"
So, das war es. So sollte es gehen.
Gruss
Thomas
Ja, hast du. Also, fangen wir mal an.Habe ich Dir die Sachlage verständlich erklärt??
Die erste Problematik ist, zu erkennen, was gerade markiert ist. Ich gehe mal von zwei Möglichkeiten aus:
1. eine einzelne Zelle -> dann wird nur dieser Text umgewandelt.
2. ein (zusammenhängender) Zellbereich -> jetzt werden alle Texte der ersten Spalte umgewandelt.
Den Umwandlungsprozess hast du ja schon gehabt, den hab ich soweit übernommen. Der Übersicht bleibt dies eine eigenständige Prozedur. Du startest das Makro "Selection", dann sollte es funktionieren:
Code: Alles auswählen
sub selektion
oDoc = StarDesktop.getCurrentComponent()
if not oDoc.supportsService("com.sun.star.sheet.SpreadsheetDocument") then
msgbox "Dies ist keine Calc-Anwendung", 16, "Fehler"
exit sub
end if
oZell = oDoc.getCurrentSelection()
if oZell.supportsService("com.sun.star.sheet.SheetCellRanges") then
msgbox "Sorry, Mehrfachselektionen werden nicht unterstützt!", 48, "Makro kann nicht gestartet werden"
exit sub
elseif oZell.supportsService("com.sun.star.sheet.SheetCell") then
REM Cursor befindet sich in einer Zelle oder eine Zelle ist gewählt
REM Jetzt Wahl des umgebenden Zellbereiches
oZellAdr = oZell.CellAddress
iSheet = oDoc.sheets(oZellAdr.Sheet)
iColumn = oZellAdr.column 'Index der Spalte
iRow = oZellAdr.row 'Index der Zeile
Textsplitten(oZellAdr.Sheet, iColumn, iRow)
elseif oZell.supportsService("com.sun.star.sheet.SheetCellRange") then
REM ein Bereich wurde markiert
iSheet = oZell.rangeAddress.Sheet
iStartSp = oZell.rangeAddress.startColumn
iStartZe = oZell.rangeAddress.startRow
iEndSp = oZell.rangeAddress.EndColumn
iEndZe = oZell.rangeAddress.EndRow
Textsplitten(iSheet, iStartSp, iStartZe, iEndSp, iEndZe)
else
msgbox "kann Arbeitsbereich nicht erkennen", 16, "Fehler"
exit sub
end if
end sub
Code: Alles auswählen
Sub TextSplitten(iSheet as integer, _
iStartColumn as integer, _
iStartRow as long, _
optional iEndColumn as integer, _
optional iEndRow as long)
If ismissing(iEndColumn) then iEndColumn = iStartColumn
if isMissing(iEndRow) then iEndRow = iStartRow
trz="," ' Trennzeichen definieren
oDoc=thisComponent
oSheet = oDoc.sheets(iSheet)
For i = iStartRow to iEndRow
oCelle = oSheet.getCellByPosition(iStartColumn, i)
'Inhalt der aktiven Zelle
inhalt=oCelle.getstring
'werte auf Array aufteilen am Trenner
atext=split(inhalt, trz)
'Schleife über alle Array-Inhalte
'Inhalte in Zellen aktive Zelle und rechts daneben
'schreiben. Die Funktion trim() entfernt dabei
'Leerzeichen vor und hinter den jeweiligen Texteinträgen
for n=lBound(atext()) to ubound(atext())
oSheet.getCellByPosition(iStartColumn+n,i).string=trim(atext(n))
next
next
End Sub
Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Schleife einbauen
Hallo Thomas,
.... was soll ich da sagen? - perfekt - genau wie ich mir das gewünscht habe.
Einfach Super.
Habe noch eine Verknüpfung in der Symbolleiste erstellt und kann nun - danke Deiner Hilfe - perfekt damit arbeiten.
Wenn allenfalls vor er Ausführung des Makros noch ein Hinweis erscheinen würde: " Achtung es werden nachfolgende Zellen überschrieben", dann wäre jeder Benutzer gewarnt - aber das muss nicht sein.
Aber auch so - das Makro sollte ins Programm implementiert werden.
Ich möchte mich bei Dir in aller Form bedanken.
P.S Spendenkonto -> kannst Du mir eine Verbindung angeben?
.... was soll ich da sagen? - perfekt - genau wie ich mir das gewünscht habe.
Einfach Super.
Habe noch eine Verknüpfung in der Symbolleiste erstellt und kann nun - danke Deiner Hilfe - perfekt damit arbeiten.
Wenn allenfalls vor er Ausführung des Makros noch ein Hinweis erscheinen würde: " Achtung es werden nachfolgende Zellen überschrieben", dann wäre jeder Benutzer gewarnt - aber das muss nicht sein.
Aber auch so - das Makro sollte ins Programm implementiert werden.
Ich möchte mich bei Dir in aller Form bedanken.
P.S Spendenkonto -> kannst Du mir eine Verbindung angeben?
Besten Dank
Virob
ein OOo Neuling
Virob
ein OOo Neuling
Hey Virob,
Na ja, ok, ich verstehe schon. Geh einfach auf die Seite des Vereins -> und dort auf Spenden ( http://www.ooodev.org/index.php?ziel=s22&rm=r00 ), da sind alle Angaben zu finden.
Freut mich, dass das Makro gefällt. Den Rest kannst du einfach selbst einbauen.
Viele Grüße
Thomas
Meinst du mein Konto???P.S Spendenkonto -> kannst Du mir eine Verbindung angeben?

Na ja, ok, ich verstehe schon. Geh einfach auf die Seite des Vereins -> und dort auf Spenden ( http://www.ooodev.org/index.php?ziel=s22&rm=r00 ), da sind alle Angaben zu finden.
Freut mich, dass das Makro gefällt. Den Rest kannst du einfach selbst einbauen.
Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic