Markierfeld "Verknüpfte Zelle"

Ich habe eine Tabelle mit ca. 1000 Markierfeldern, da es immer 4 sind und diese sich wiederholen, habe ich die 4 kopiert und immer wieder eingefügt, das hat auch gut funktioniert.

Mein Problem ist jetzt aber noch, dass das Feld “Steuerelement-Eigenschaften → Daten → Verknüpfte Zelle” noch den Wert des ursprünglichen Markierfeldes hat.

Gibt es eine Möglichkeit das Feld “Verknüpfte Zelle” automatisch beim kopieren auf die Zielzelle ändert (so wie bei Formeln ja auch)?

Ich habe keine Möglichkeit gefunden, deshalb habe ich mit auch schon ein bisschen mit Makros beschäftigt (da ich Python kann aber nur mit Python Makro).
Ich habe es geschafft in einer Schleife alle Markierfelder zu durchlaufen und zum Beispiel die Schriftart zu ändern, aber das Feld “Verknüpfte Zelle” kann ich nicht ändern. Ich vermute es ist das Attribut “BoundField”, dieses lässt sich aber nicht einfach als String ändern, kann mir da jemand einen Tipp geben, wie das geht. Oder eine viel einfachere Lösung direkt beim kopieren nennen :grin:

Das ist mein bisheriger Code:

def link_checkboxes():
    doc = XSCRIPTCONTEXT.getDocument()
    sheet = doc.CurrentController.ActiveSheet
    draw_page = sheet.DrawPage
    total_shapes = draw_page.Count
    for i in range(total_shapes):
        shape = draw_page.getByIndex(i)
        if shape.supportsService("com.sun.star.drawing.ControlShape"):
            control = shape.Control
            cell_address = shape.Anchor.CellAddress
            cell = sheet.getCellByPosition(cell_address.Column, cell_address.Row)
            cell_name = cell.AbsoluteName
            #control.setPropertyValue("BoundField", cell_name)      #Das hier gibt mir einen Error
            control.setPropertyValue("FontName", "Calibri")
    return None

So funktioniert der Code ohne Probleme, nur wenn ich BoundField ändern möchte kommt folgender Error:
com.sun.star.beans.PropertyVetoException: at C:/cygwin64/home/buildslave/source/libo-core/cppuhelper/source/propshlp.cxx:494 (Error during invoking function link_checkboxes in module file:///C:/Users/User/AppData/Roaming/LibreOffice/4/user/Scripts/python/checkbox_links.py (<class ‘ooo_script_framework.com.sun.star.beans.PropertyVetoException’>: at C:/cygwin64/home/buildslave/source/libo-core/cppuhelper/source/propshlp.cxx:494
File “C:\Program Files\LibreOffice\program\pythonscript.py”, line 916, in invoke
ret = self.func( *args )
File “C:\Users\User\AppData\Roaming\LibreOffice\4\user\Scripts\python\checkbox_links.py”, line 14, in link_checkboxes
control.setPropertyValue(“BoundField”, cell_name) #Das hier gibt mir einen Error
))

Vielen Dank an alle für eure Hilfe! :blush:

Seltsam… vor einer Woche gabs eine sehr ähnliche Fragestellung im deutschen Forum

Erstens darfst du da mit Sicherheit keinen »cell_name« als Argument übergeben, sondern es muss eine »cell_address« genommen werden ( schau mal zwei Zeilen weiter oben :wink: )

Zweitens bedarf es einer extra Vorbereitung:

from com.sun.star.beans import NamedValue as NV
…

    nv = NV( Name="BoundCell", Value=cell_address )    
    bind = doc.createInstance("com.sun.star.table.CellValueBinding")
    bind.initialize((nv,))
    control.setValueBinding(bind)

Alles am Stück:

from com.sun.star.beans import NamedValue as NV

def link_checkboxes(*_):
    doc = XSCRIPTCONTEXT.getDocument()
    sheet = doc.CurrentController.ActiveSheet
    draw_page = sheet.DrawPage
    for shape in draw_page: 
        if shape.supportsService("com.sun.star.drawing.ControlShape"):
            control = shape.Control
            cell_address = shape.Anchor.CellAddress
            
            nv = NV( Name="BoundCell", Value=cell_address )    
            bind = doc.createInstance("com.sun.star.table.CellValueBinding")
            bind.initialize((nv,))
            control.setValueBinding(bind)
            
            control.setPropertyValue("FontName", "Calibri")

hallo karolus :blush:

vielen dank für die schnelle Antwort, habe garnicht so schnell damit gerechnet :sweat_smile:
danke für die Tipps, leider kann ich es erst Ende nächster Woche ausprobieren, aber das klingt logisch was du schreibst :+1:t3:

Ich dachte nur, dass ich den Zellnamen brauche, da ich den ja auch brauche wenn ich es manuell ohne Makro eingebe :thinking:

Den Beitrag von letzter Woche hab ich tatsächlich auch gesehen, wollte es auch so anpassen, gab dann auch nur Error, vermutlich lag es dann aber daran, dass ich den Zellnamen verwendet habe.

Vielen Dank nochmal, wenn ich nächste Woche immernoch Probleme habe melde ich mich nochmal :blush:

Ich war auch nur deshalb so schnell weil das »quasi noch frisch auf dem Schreibtisch lag«

Hallo karolus, nochmal vielen Dank! :blush:
ich habe es ausprobiert, hat auf anhieb funktioniert!

Ich habe, jetzt wo ich den richtigen Code kenne, versucht ihn über die libreoffice API und über MRI herauszufinden wie ich es hätte machen müssen, finde nicht wirklich Hinweise darauf, dass ich “BoundCell” als NamedValue mit der Zell-Adresse als CellValueBinding initialisieren muss um das dann bei meiner Checkbox mit setValueBinding zu binden :sweat_smile:

Ich frage mich also, wie genau man sich das selbst erarbeiten kann, um nicht beim nächsten Problem gleich wieder fragen zu müssen :thinking:

Das ging mir zunächst im oben verlinkten Beitrag aus dem deutschen Forum genauso :woozy_face: bevor Mikele das passende Thema aus stackoverflow verlinkt hat.

Alles klar, also weiter Foren durchwühlen und über verschiedene Seiten versuchen herauszufinden was zu tun ist :sweat_smile::+1:t3:
Vielen Dank für alle Hilfe, Fall ist damit gelöst :blush: