Text in Spalten ala M$ Excel

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

bashtux
Beiträge: 5
Registriert: Mi, 26.11.2003 11:20

Text in Spalten ala M$ Excel

Beitrag von bashtux »

Hallo,
ich arbeite seit geraumer Zeit mit OO, vermisse aber eine Funktion in OO Calc, die ich in Excel sehr praktisch fand: "Text in Spalten" (kurze Erklärung: Anhand von definierbaren Textbegrenzungszeichen wird eine Zeichenkette in einer Zelle auf mehrere Zellen aufgeteilt).
Diese Funktion vermisse ich schon sehr.
Gibt es so eine Funktion? In der Hilfe fand ich leider keinen Hinweis auf etwas Vergleichbares :-(.

Ich würde mich freuen, wenn jemand darauf eine positive Antwort hätte.

Thomas
-- Der aus dem hohen Norden --
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Thomas,

eine vergleichbare Funktion ist mir nicht bekannt.

Dies wäre aber durch ein Makro zu lösen.

Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
bashtux
Beiträge: 5
Registriert: Mi, 26.11.2003 11:20

Beitrag von bashtux »

Hallo Thomas,
ich habe diese Antwort befürchtet :-(.
Bei einer Zeichenkette, die sich auf zwei Spalten aufteilen würden, könnte ich mir schon vorstellen, auf ein Makro zurückzugreifen,
aber die typischerweise auftretenden Strings müssten auf 9-11 Spalten aufgeteilt werden, je nach Quellanwendung.
Ich werde mich mal mit dem Makro-Gedanken auseinandersetzen.
Trotzdem vielen Dank für die Antwort!

Thomas
-- Der aus dem hohen Norden --
bashtux
Beiträge: 5
Registriert: Mi, 26.11.2003 11:20

Beitrag von bashtux »

Hallo Thomas,
ich habe diese Antwort befürchtet :-(.
Bei einer Zeichenkette, die sich auf zwei Spalten aufteilen würden, könnte ich mir schon vorstellen, auf ein Makro zurückzugreifen,
aber die typischerweise auftretenden Strings müssten auf 9-11 Spalten aufgeteilt werden, je nach Quellanwendung.
Ich werde mich mal mit dem Makro-Gedanken auseinandersetzen.
Trotzdem vielen Dank für die Antwort!

Thomas
-- Der aus dem hohen Norden --
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Thomas,

ob zwei - oder neun Spalten, das ist für das Makro egal. Wenn du nicht weiterkommst, gib Bescheid. Das ist nicht so schwierig.

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
bashtux
Beiträge: 5
Registriert: Mi, 26.11.2003 11:20

Beitrag von bashtux »

Hallo Thomas,
ich habe mir mal die Syntax eines aufgezeichneten Makros angsehen.
Ich muss zugeben, daß ich als M$-Excel-VBA-User so ein gewisse Umstell-Zeit benötigen würde, um ähnlich sicher mit OO-Basic umzugehen wie mit VBA.
Aus diesem Grund würde ich mich sehr freuen, wenn Du mir einen Hinweis geben könntest, wie ich ein solches Makro stricken müsste.
Oder gibt es so etwas schon fertig?

Thomas
-- Der aus dem hohen Norden --
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hallo Thomas,

tia, VBA und OOo-Makros sind eben doch etwas verschiedenes. Aber, kein Problem.
Hier das Makro:

Code: Alles auswählen

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
Hab ich getestet mit der Zeichenfolgekette
"Montag, Dienstag, Mitwoch, Donnerstag, Freitag, Samstag"
Funktioniert einwandfrei. Wenn Du nicht zurecht kommst, schick ich dir gerne die Datei inkl. Makro zum testen und lesen.

Hoffe, es hilft :)

Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
bashtux
Beiträge: 5
Registriert: Mi, 26.11.2003 11:20

Beitrag von bashtux »

Hallo Thomas,
vielen Dank für den Code, er funktioniert genauso, wie es mir gedacht habe! :-)
Habe es mit den bei mir anfallenden Strings erfolgreich getestet.
Und durch den variablen Trenner bin ich noch flexibler.

Wieder ein Schritt hin zum M$-freien Arbeitsplatz!

Nochmals vielen Dank für die schnelle Hilfe.

Thomas
-- Der aus dem hohen Norden --

p.s. Gibt es eine gute Literatur, um sich in OO-Basic einzuarbeiten?
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hallo Thomas,

schön, dass es hilft. Es empfiehlt sich aber, das Makro später noch mit entsprechenden Fehlerroutinen zu schützen und somit zu perfektionieren. Hab ich auf die Schnelle nicht gemacht.

Zum Einlesen in Basic:
Am besten das OpenOffice.org SDK heruterladen und installieren. Um das aber alles zu verstehen, ist etwas Programmierkenntnis norwendig.
Auch gut: "Basic Programmers Guide" von Sun , jetzt für StarOffice7. Auf der Homepage von Sun suchen oder dem Link auf OpenOffice.org folgen -> irgendwo bei Literatur? Kostenlos, PDF, 260S, englisch

bis bald
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hallo Gast,

ein paar mehr Informationen wären schon von Nöten :wink:

Ansonsten:
Die Antwort ist einfach: mit Schleifen.

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
TenBaseT
****
Beiträge: 128
Registriert: Mo, 08.03.2004 10:01

Beitrag von TenBaseT »

Kann man nicht das Sub Main durch Sub Main(oQuelle, oZiel) ersetzen? Dann sollte man es doch als Funktion eingeben können.

Ich bin aber noch nicht so weit, dass isch das definitiv heute noch auf die Reihe bekomme. Ich seh mir das gleich einmal an.

Hans
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Gast,

na, da hast du doch schon fast alles.

Die Selektion hat Eigenschaften, unter anderem ein Objekt "rangeaddress", das wiederum hat Eigenschaften wie sheet (integer) , Startrow, endrow, startcolumn, endcolumn (long).

Die kannst du doch auslesen und hast dadurch deine Start- und Endwerte.

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hallo Gast,

trotzdem noch ein Tipp: Wenn du mal in Basic nicht weiterweisst:

Dann lass dir einfach die Objekteigenschaften und -Methoden anzeigen:

Code: Alles auswählen

msgbox  <objekt>.dbg_properties   ' die Eigenschaften
msgbox  <objekt>.dbg_methods     ' die Methoden
So hangelt man sich dann von Objekt zu Objekt und und findet normalerweise alles, was man sucht. So mache ich das auch und habe schon viele, viele Stunden damit verbracht :wink:

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Gast (hast du eigentlich auch einen Namen?)

also, wenn das dein Code ist, ist der für mich ein wenig unübersichtlich und - wie ich glaube - hat einige strukurelle Fehler.

Was soll die sub "main"? Einen Dialog öffnen und gleich wieder schliessen?
"main" ist kein besonderes Schlüsselwort. Wenn du Variablen gundsätzlich definieren willst - was übrigens sinnvoll wäre, z.B. Dlg, oDoc, evt. auch oCelle...- dann kannst du das am Anfang des gesamten Moduls, also vor dem ersten sub, tun. Dann gelten die Variablen für alle Subs oder Funktionen.

Mir fehlt jetzt einfach die Vorgehensweise: Wann wird der Dialog aufgerufen? Aus der Sun "SelektierteZellen" -> "einzeln" ? in dieser Sub wird Dlg neu definiert, aber nicht ausgeführt?
Bekommst du eigentlich irgendwelche Fehlermeldungen?

Leider kann ich den Code nicht teten, da mir natürlich dein Dialog fehlt. Handelt es sich bei Feld "edZeichen" denn auch um ein Textfeld? Numerische Felder haben keine Texteigenschaft, sondern eine Value-Eigenschaft.

Wenn du nicht weiterkommst, kannst du mir die Datei mal schicken (als pm) , dann kann ich mehr sagen.

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hallo Gast (ok, noch nicht angemeldet, aber einen Namen wirst du doch trotzdem schon haben? Einfach mit unterschreiben!)

OK, einigermassen verstanden. Dann kommentier mal die Zeile in der Sub "Einzeln" aus, die die mit Dlg beginnt (also die zweite Zeile) und setze deine erste Zeile in der Sub "main" (Dim Dlg as object) mal vor die Sub main.

Dann sollte es eigentlich funktionieren.

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Antworten