❤️ Helfen Sie noch heute, unser LibreOffice Forum zu erhalten! ❤️
Unterstützen Sie das LibreOffice-Forum und helfen Sie uns, unser Ziel für 2025 zu erreichen!

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱


❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

[gelöst] Eigene Funktionen mit Stadtartofficefunktionen nutzen

CALC ist die Tabellenkalkulation, die Sie immer wollten.
Antworten
Don Jojo
Beiträge: 2
Registriert: Di 24. Okt 2017, 11:34

[gelöst] Eigene Funktionen mit Stadtartofficefunktionen nutzen

Beitrag von Don Jojo » Di 24. Okt 2017, 12:10

Hi

Ich versuche gerade heraus zu finden, wie man sich in LibreOffice Calc das Leben etwas einfacher gestalten kann. Hintergrund ist der, dass ich in einer relativ großen Tabelle mit mehreren Blättern einen Eintrag umschreiben muss, der sich immer wieder periodisch wiederholt. Als Minimalbeispiel zum Nachvollziehen, kann man sich meine Situation in etwa so vorstellen:

Ich habe eine Adressliste mit Name, Vorname, Straße, Stadt. Diese Liste will ich umschreiben in eine Liste Name, Vorname, Adresse. Zusätzlich habe ich eine Übersetzungsliste, über die ich zum Beispiel italienische Stadtnamen wie Roma zu Rom oder Bolzano zu Bozen umschreiben will und dazu SVerweis nutze. Die original Adressliste erstreckt sich über mehrere Tabellenblätter und hat mehrere hundert Einträge.

Ich habe mal ein Minimalbeispiel angehängt:
minimalbeispiel.ods
(15.06 KiB) 164-mal heruntergeladen
Klar, ich kann mir einfach einmal schreiben, wie ein Eintrag umformatiert werden soll, dann die Region markieren und die Formel runterziehen, so dass sie auch in den anderen Zellen steht. Dann kopiere ich die Formeln in das nächste Tabellenblatt und so weiter. Problem ist nur, was ist wenn ich nachträglich etwas ändern will? Dann muss ich den ersten Eintrag umschreiben, wieder nach unten ziehen, kopieren und so weiter. Das würde ich gerne vermeiden. Meine Frage ist: Wie kann ich das vermeiden?

Mein Wunsch wäre es, dass ich zum Beispiel für die Adresse eine eigene Funktion schreibe mit dem Namen ADRESSE(STRASSE, STADT) und dann in der Zelle einfach reinschreibe "=ADRESSE(B12;B13)". Das kann ich dann runterziehen, und wenn ich nachträglich etwas ändern will, weil mir zum Beispiel die Formatierung der Adresse nicht gefällt und ich zuerst den Stadtnamen und dann die Straße haben will, dann kann ich einfach die Funktion umschreiben und habe automatisch in jeder Zelle die neue Formatierung ohne viel mit Copy-und-Paste arbeiten zu müssen.

Problem: Ich habe ein bisschen mit LibreOffice Basic herumgespielt, aber dort kann ich Funktionen wie SVERWEIS() nicht aufrufen. Da bekomme ich immer den Fehler "BASIC-Laufzeitfehler. Sub- oder Function-Prozedur nicht definiert." Eine andere Alternative habe ich noch nicht gefunden. Und die Funktion SVERWEIS nochmal komplett neu zu programmieren, kann ist ja auch nicht besonders zielführend. Gibt es irgend eine vernünftige Lösung für das was ich suche?

Liebe Grüße
Jojo
Zuletzt geändert von Don Jojo am Do 26. Okt 2017, 14:23, insgesamt 1-mal geändert.

mikele
* LO-Experte *
Beiträge: 1947
Registriert: Mo 1. Aug 2011, 20:51

Re: Eigene Funktionen mit Stadtartofficefunktionen nutzen

Beitrag von mikele » Mi 25. Okt 2017, 09:13

Hallo,
wenn ich dich richtig verstehe, hast du eine Art Datenbank mit
1) diversen Adressen (Name, Vorname, Ort, Straße)
2) einer "Übersetzungstabelle"
Dies soll auch so bleiben (ansonsten wäre das folgende ein einmaliger Akt).
Du möchtest eine Funktion, die dir aus der Straße und dem Ort (mit evtl. Übersetzung) eine "zusammengesetzte" Adresse baut.
Die Art der Zusammensetzung möchtest du aber variieren können.
Lösbar ist es auf alle Fälle per eigens programmierter Funktion:
Function Adresszeile_udf(strasse as string, ort as string, uebersetzung as array)
for i=1 to ubound(uebersetzung(),1)
if uebersetzung(i,1)=ort then
ort=uebersetzung(i,2)
i=ubound(uebersetzung(),1)
end if
next
adresszeile_udf=strasse & ", " & ort
End Function
In der Schleife wird nach einer Übersetzung gesucht und zuletzt die Adresszeile nach Wunsch zusammengesetzt.
Dateianhänge
minimalbeispiel.ods
(16.49 KiB) 127-mal heruntergeladen
Gruß,
mikele

Helmut_S
* LO-Experte *
Beiträge: 757
Registriert: Di 9. Feb 2016, 19:27

Re: Eigene Funktionen mit Stadtartofficefunktionen nutzen

Beitrag von Helmut_S » Mi 25. Okt 2017, 16:38

Hallo Don Jojo, wenn du Calc-Tabellenfunktionen in einem Makro verwenden willst, musst du englischsprachige Funktionsnamen verwenden.
Siehe dazu diese Seite aus Michael Dannenhöfers Starbasic-Faq
http://www.dannenhoefer.de/faqstarbasic ... l#Zweig229
sowie
http://www.dannenhoefer.de/faqstarbasic ... funktionen
Gruß Helmut
MX-Linux KDE + Linux-Mint Cinnamon

Don Jojo
Beiträge: 2
Registriert: Di 24. Okt 2017, 11:34

Re: Eigene Funktionen mit Stadtartofficefunktionen nutzen

Beitrag von Don Jojo » Do 26. Okt 2017, 14:23

Hallo

Vielen Dank für eure Antworten. Ich habe beide Lösungen ausprobiert und sie funktionieren beide super. Dankeschön :D!

Welcher Lösung ich den Vorzug geben werde, werde ich in den nächsten Tagen ausprobieren.

Eine kurze Ergänzung noch. Ich wollte eigentlich fragen, wie man in Basic-Funktionen auf statische Array-Bereiche zugreifen kann. Die Lösung habe ich dann beim googlen (Treffer 1, Treffer 2) aber selber gefunden. Weil der folgende Code funktioniert zwar, hat aber einen Nachteil: Wenn ich die Übersetzungsliste "translations" jedesmal in den Funktionsaufruf packen muss und die Liste am Ende noch erweitern will, dann muss ich diesen Eintrag wieder in allen Zellen ändern. Das ist wieder mal so was unerwünschtes.

Code: Alles auswählen

Function Stadt(location as string, translations as array)
	Dim args( 3 ) As Variant
		args(0) = location
		args(1) = translations
		args(2) = 2
		args(3) = 0

	Fct = createUnoService( "com.sun.star.sheet.FunctionAccess" )
	Stadt =  Fct.callFunction("VLOOKUP",args())
End Function
Die Lösung ist recht simpel und sieht so aus:

Code: Alles auswählen

Function Stadt(location as string)
	Doc = ThisComponent   'das Dokumentenobjekt
	Sheet = Doc.sheets(0)  ' das erste Tabellenblatt
	translations = Sheet.getCellRangeByName("A5:B6")  'die Zellen A5 bis B6

	Dim args( 3 ) As Variant
		args(0) = location
		args(1) = translations
		args(2) = 2
		args(3) = 0
        
	Fct = createUnoService( "com.sun.star.sheet.FunctionAccess" )
	Stadt =  Fct.callFunction("VLOOKUP",args())
End Function
Funktioniert ebenfalls einwandfrei. Ich habe gedacht, ich ergänze das einfach noch, weil andere vielleicht auf die selbe Frage stoßen werden.

Vielen Dank für eure Hilfe. Ihr habt mir mit LibreOffice jetzt eine neue Dimension der Möglichkeiten eröffnet :D

Liebe Grüße
Jojo

mikele
* LO-Experte *
Beiträge: 1947
Registriert: Mo 1. Aug 2011, 20:51

Re: [gelöst] Eigene Funktionen mit Stadtartofficefunktionen nutzen

Beitrag von mikele » Do 26. Okt 2017, 17:19

Hallo,
hat aber einen Nachteil: Wenn ich die Übersetzungsliste "translations" jedesmal in den Funktionsaufruf packen muss und die Liste am Ende noch erweitern will, dann muss ich diesen Eintrag wieder in allen Zellen ändern.
Das Problem kannst du am einfachsten dadurch umgehen, indem du dem Übersetzungsbereich (aktuell A5:B6) einen Namen gibst, z. B. translations. Dann kannst du den Funktionsaufruf mit dem Namen machen.
Gruß,
mikele


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten