Получить список всех текстовых полей или парсинг XML.

Автор 0xJah, 17 декабря 2013, 12:33

0 Пользователи и 1 гость просматривают эту тему.

0xJah

Добрый день.
Добавляю в документ текстовые поля таким методом:
cursor = document.getCurrentController().getViewCursor()
textField = document.createInstance("com.sun.star.text.textfield.User")
userField = document.createInstance("com.sun.star.text.fieldmaster.User")
userField.setPropertyValue("Name", "Имя")
userField.setPropertyValue("Content", " --Значение-- ")
textField.attachTextFieldMaster(userField)
document.Text.insertTextContent(cursor, textField, 0)


Мне нужно получить список всех полей в документе, пробовал таким методом:
fields = document.TextFields.createEnumeration()
while fields.hasMoreElements():
field = fields.nextElement()
field_text = out.getPresentation(0)

Но он позволяет получить только список значений полей (Content), а мне так же нужно и имена полей. Подскажите как реализовать данную задачу.
Идеальным решением для меня конечно было бы, если бы можно было получить xml документа (content.xml).

Пишу макрос на Python, но можно посмотреть пример и на Basic, правда не всегда получается его перевести на Python в силу слабого понимания работы OOo API.

JohnSUN

Что-то вроде этого?
from com.sun.star.uno import RuntimeException

def MFNames(ctx, oDoc):
    """ Get list of masterfield's names """
    try:
        oTextFieldMasters = oDoc.getTextFieldMasters()
        oElementNames = oTextFieldMasters.getElementNames()
    except RuntimeException as e:
        # getElementNames
        print(e)


Попробуй установить на офис расширение MRI - эти 9 строк кода он мне сгенерировал после двух прицельных кликов по свойствам тестового документа.
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

0xJah

JohnSUN, огромное Вам спасибо. Именно такой тулзы мне и не хватало для нормальной работы, ибо я вообще не понимаю как можно пользоваться странной документацией OOo API. А в этом расширении все предельно ясно и легко можно пощупать всё руками.