2010-12-27 28 views
1

Ich muss programmgesteuert Zeilen einer Tabelle in OpenOffice Writer duplizieren.openoffice: Zeilen einer Tabelle in Writer duplizieren

Es ist nicht schwer Zeilen über table.Rows.insertByIndex(idx, count) hinzufügen, fügt hinzu, dass leere Zeilen und es ist einfach, den Text in dieser Zeile hinzufügen DataArray zum CellRange zuweisen. Auf diese Weise verlieren Sie die Kontrolle über den Stil der Zellen und speziell, wenn eine Zelle Wörter mit einem anderen Stil (fett/kursiv) hat, werden sie auf das gleiche Gesicht abgeflacht. Ich brauche eine Zeile so zu duplizieren, dass der Stil jedes Wortes in der Zelle/Zeile erhalten bleibt.

Dies ist der letzte Schritt eines Python-Vorlagensystems, das openoffice (http://oootemplate.argolinux.org) verwendet. Ich greife auf das Dokument über die Uno-Schnittstelle in Python zu, aber jede Sprache würde ausreichen, um die Logik dahinter zu erklären.

Antwort

5

Die Lösung besteht darin, Controller-Methode .getTrasable() zu verwenden, um Daten vom ViewCursor zu erhalten. Das wiederum erfordert, dass Sie Ihren Ansichts-Cursor steuern und ihn in jeder einzelnen Zelle positionieren (ich konnte den ViewCursor nicht über mehrere Zellen erstrecken). Sobald Sie das Übertragbare erworben haben, setzen Sie den Cursor auf das Ziel und fügen es ein.

desktop = context.ServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", context) 
    document = desktop.loadComponentFromURL("file://%s/template-debug.odt" % os.getcwd() ,"_blank", 0,()) 
    controller=document.getCurrentController() 
    table = document.TextTables.getByIndex(0) 
    view_cursor=controller.getViewCursor() 


    src = table.getCellByName(src_name) 
    dst = table.getCellByName(dst_name) 

    view_cursor.gotoRange(src.Text, False) 
    txt = controller.getTransferable() 
    view_cursor.gotoRange(dst.Text, False) 

    controller.insertTransferable(txt)