openoffice: дублирование строк таблицы в писателе - PullRequest
1 голос
/ 27 декабря 2010

Мне нужно программно дублировать строки таблицы в openoffice writer.

Нетрудно добавить строки через table.Rows.insertByIndex(idx, count), который добавляет пустые строки, и легко добавить текст в этой строке, назначив DataArray для CellRange.Поступая таким образом, вы теряете контроль над стилем ячеек, и, в частности, если в ячейке есть слова с другим стилем (жирным шрифтом / курсивом), они сглаживаются на одном лице.Мне нужно продублировать строку таким образом, чтобы сохранить стиль каждого слова в ячейке / строке.

Это последний шаг системы шаблонов Python, использующей openoffice (http://oootemplate.argolinux.org).Я получаю доступ к документу через интерфейс uno в Python, но любой язык поможет объяснить логику, стоящую за ним.

1 Ответ

5 голосов
/ 04 января 2011

Решением является использование метода контроллера .getTrasferable () для получения данных из ViewCursor. это, в свою очередь, требует, чтобы вы управляли курсором вида и размещали его в каждой отдельной ячейке (я не смог настроить ViewCursor на несколько ячеек). После того, как вы приобрели передаваемый файл, поместите курсор в пункт назначения и вставьте.

  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)
...