Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

14 Декабрь 2017, 01:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Получить список всех текстовых полей или парсинг XML.  (Прочитано 2433 раз)
0 Пользователей и 1 Гость смотрят эту тему.
0xJah
Новичок
*
Offline Offline

Сообщений: 6


« Стартовое сообщение: 17 Декабрь 2013, 11:33 »

Добрый день.
Добавляю в документ текстовые поля таким методом:
Код:
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
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 373


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #1: 17 Декабрь 2013, 14:07 »

Что-то вроде этого?
Код:
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
Новичок
*
Offline Offline

Сообщений: 6


« Ответ #2: 18 Декабрь 2013, 11:47 »

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

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!