🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ 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. 🤗

Aktuelle Tabellenzeile nutzen / Zahlenfomat per Makro

Alles zur Programmierung im LibreOffice.
Libreliker
Beiträge: 6
Registriert: So 4. Jan 2015, 16:45

Aktuelle Tabellenzeile nutzen / Zahlenfomat per Makro

Beitrag von Libreliker » So 4. Jan 2015, 16:52

Hallo liebe Leute,

ich bräuchte eure Hilfe für ein Makro das ich aufgenommen habe. Programmiertechnisch bin ich leider nicht sonderlich bewandert und hoffe einer von euch Profis hat einen Tipp parat.

Es handelt sich um diesen Makroteil:
_____
rem ----------------------------------------------------------------------
dim args23(0) as new com.sun.star.beans.PropertyValue
args23(0).Name = "Formula"
args23(0).Value = "<D5>*<C5>"

dispatcher.executeDispatch(document, ".uno:InsertFormula", "", 0, args23())
____

Ich würde gerne die aktuelle Zeile hier per Programmcode einfügen.
D.h. D und C können fixiert bleiben, jedoch soll de "5" hier im Beispiel jeweils die aktuelle Zeile sein. Ist das möglich und einfach zu implementieren?


Die zweite Frage wäre, ich würde gerne die Zellen C und D der aktuellen Zeile mit einem Zahlenformat formatieren: #.##0,00
Dieses Feature lässt sich offensichtlich nicht mit dem Marko Rekorder festhalten.
Vielen Dank schonmal vorab.

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

Re: Aktuelle Tabellenzeile nutzen / Zahlenfomat per Makro

Beitrag von mikele » So 4. Jan 2015, 17:04

Hallo,

so pauschal lässt sich das nicht beantworten.
1. aufgrund des Syntax vermute ich mal, du befindest dich in der Textverarbeitung (writer)
2. du hast eine Texttabelle in der du Einfügungen machen möchtest
An welcher Stelle rufst du dein Makro auf? (innerhalb der Tabelle, ...?)
Was soll dein Makro insgesamt leisten? (die Lösung des einen Teils ist ohne die Kenntnis der restlichen Funktionalitäten nicht effektiv)
sehr hilfreich für die Hilfe wäre eine (anonymisierte) Beispieldatei.
Gruß,
mikele

Libreliker
Beiträge: 6
Registriert: So 4. Jan 2015, 16:45

Re: Aktuelle Tabellenzeile nutzen / Zahlenfomat per Makro

Beitrag von Libreliker » So 4. Jan 2015, 20:22

Vielen Dank für die schnelle Antwort:

1. Ja, Writer
2. Ja eine Tabelle die jedes mal gleich aussieht. Ich rufe das Makro "Produkt" auf, wenn ich den Cursor in einer neuen Zeile habe und möchte das mit vordefiniertem Text und Zahlen ausfüllen. Die Textformatierung übernimmt es. Die Positionierungen passen.

Die Zeile 1 ist die Beispielzeile. Die Zeile 2 wurde durch das Makro erzeugt.


3. Was mir nicht gelingt:

3.1. Dass die letzte Spalte eine Multiplikation aus den beiden davorliegenden ist und zwar aus der jeweiligen Zeile.
3.2. Dass wenn die Tabellenzelle ohne Formatierung ist, also nicht von oben runter kopiert... die Zahlenformatierung in der Makroaufzeichnung nicht funktioniert. Ich möchte z.b 1000 schreiben, und eine automatische Wandlung auf mein gewünschtes Zahlenformat => 1.000,00
Dateianhänge
Makro Vorlage.odt
(21.4 KiB) 134-mal heruntergeladen

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Aktuelle Tabellenzeile nutzen / Zahlenfomat per Makro

Beitrag von F3K Total » Mo 5. Jan 2015, 02:12

Moin,
hiermit kannst Du mal loslegen

Code: Alles auswählen

Sub ZeileEinfuegen
    myDoc = thisComponent
    myTables = myDoc.getTextTables
    myTable = myTables.getByName("Tabelle1")
    rows = myTable.rows
    anzahl = myTable.rows.count
    vorletztezeile = anzahl - 4
    rows.insertByIndex(vorletztezeile,1)
    oformatcell =  myTable.getCellByName("D3")
    nNumberformat = oformatcell.NumberFormat
    zelle = myTable.getCellByPosition(0,vorletztezeile)
    zelle.value = vorletztezeile - 1
    zelle = myTable.getCellByPosition(2,vorletztezeile)
    zelle.value = 0.0
    zelle = myTable.getCellByPosition(3,vorletztezeile)
    zelle.value = 0.0
    zelle.NumberFormat = nNumberformat
    zelle = myTable.getCellByPosition(4,vorletztezeile)
    zelle.NumberFormat = nNumberformat
    zelle.Formula="=<C"&(vorletztezeile+1)&">*<D"&(vorletztezeile+1)&">"  
End Sub
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

Libreliker
Beiträge: 6
Registriert: So 4. Jan 2015, 16:45

Re: Aktuelle Tabellenzeile nutzen / Zahlenfomat per Makro

Beitrag von Libreliker » Mo 5. Jan 2015, 11:41

Hallo vielen Dank schonmal. Ist das ein Beispiel das es umzubauen gilt, oder sollte das schon funktionieren?

Denn leider bekomme ich folgenden Fehler beim Ausführen:

BASIC-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten
Type: com.sun.star.lang.IndexOutOfBoundsException
Message: .

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Aktuelle Tabellenzeile nutzen / Zahlenfomat per Makro

Beitrag von F3K Total » Mo 5. Jan 2015, 11:55

Moin,
sollte schon funktionieren, siehe Beispieldatei anbei, allerdings muss hier deine SN- Nr. noch eingebaut werden.
Gruß R
Dateianhänge
Makro Vorlage.odt
(15.67 KiB) 138-mal heruntergeladen
Windows 11: AOO, LO Linux Mint: AOO, LO

Libreliker
Beiträge: 6
Registriert: So 4. Jan 2015, 16:45

Re: Aktuelle Tabellenzeile nutzen / Zahlenfomat per Makro

Beitrag von Libreliker » Mo 5. Jan 2015, 15:04

F3K Total: Ich danke schon vielmals.

Eine Sache bei der ich leider garnicht weiter weiß: Ich hätte gerne das Zahlenformat ohne € Symbol mit dem Formatcode: #.##0,00

Die Funktion ist aktuell zu steif (deshalb ging es in dem anderen Dokument nicht). Aber erstmal gut damit ich das verstehen überhaupt.
Das "steif" deshalb, weil die Tabelle ja immer gleich aussehen muss und das zumindest vor allem unten nicht tut. Ist es möglich die aktuelle Zeile (in der eingefügt wird und auch der Cursor steht herauszufinden) Und dann eine Multiplikation von C(aktuelle Zeile) * D(aktuelle Zeile) auszuführen?

Meine Originalfunktion mit Makrorecorder tut alles was sie soll:
+ korrekt formatieren Text einfügen
+ einen dynamischen Zeilenzähler einfügen, der bei einer Zeilenlöschung sich selbst aktualisiert
+ die Werteeintragung

Was nicht funktioniert:
- Das Zahlenformat (das nimmt der Makrorekorder bei mir einfach nicht mit auf)
- Die Multiplikation die statisch fest ist und aber dynamisch auf die jeweilige aktuelle Zeile angepasst sein sollte

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Aktuelle Tabellenzeile nutzen / Zahlenfomat per Makro

Beitrag von F3K Total » Mo 5. Jan 2015, 16:43

Hi,
das Format holt sich das Makro aus dieser Zeile

Code: Alles auswählen

oformatcell =  myTable.getCellByName("D3")
Änderst Du das Format in D3, wird es vom Makro übernommen.
R
Windows 11: AOO, LO Linux Mint: AOO, LO

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

Re: Aktuelle Tabellenzeile nutzen / Zahlenfomat per Makro

Beitrag von mikele » Mo 5. Jan 2015, 20:32

Hallo,

anstelle der eleganten Lösung von F3K total fahre ich mal ein größeres Geschütz auf. Ich fand es ziemlich spannend, da ich 'ne Menge dabei gelernt habe (nun weiß ich auch, wie ich die Nummer eines Formatcodes herausfinde :D ).
Für die automatische Nummerierung halte ich hier die Absatznummerierung für günstiger als Textfelder (als Alternative im Makro enthalten). Dafür nutze ich die Formatvorlage "Nummerierung 2".
Um die Programmierung etwas einfacher zu gestalten habe ich zwei Formatvorlagen entsprechend deiner verwendeten Formate definiert:
1) Tabelle_allgemein für den "normalen" Text (Verdana, 10)
2) Tabelle_Attribut für die Zeile mit dem Text Attribut (Verdana, 7, grau)
Das Makro ist umfangreicher geworden, da jede Zelle (zur Sicherheit) noch wie gewünscht formatiert wird.

Nach der Zeile in der sich der Cursor befindet, wird eine neue Zeile mit den Formatierungen und Inhalten angelegt. Sollte das Makro aufgerufen werden, wenn sich der Cursor außerhalb der Tabelle befindet, bekommst du einen kleinen Hinweistext.
Dateianhänge
Makro Vorlage neu.odt
(18.38 KiB) 177-mal heruntergeladen
Gruß,
mikele

Libreliker
Beiträge: 6
Registriert: So 4. Jan 2015, 16:45

Re: Aktuelle Tabellenzeile nutzen / Zahlenfomat per Makro

Beitrag von Libreliker » Di 13. Jan 2015, 16:32

Hallo Mikele,

das große Geschütz trifft ins Schwarze. Hut ab und Respekt das war ja wohl etwas Arbeit und sieht alles sehr sehr gut aus. Funkionalität perfekt passend.

Leider habe ich noch ein Problem (Schande über mein Haupt): Ich kann das Makro nicht in meine eigene Datei einfügen. Ich bekommen den Fehler:

BASIC-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten
Type: com.sun.star.lang.IllegalArgumentException
Message: .

Und zwar in dieser Zeile: oTC.paraStyleName="Tabelle_allgemein"

Woran kann das liegen und was kann ich dagegen tun?

Vielen Dank!


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