2015-02-18 6 views
0

При использовании pyuno в макросе python LibreOffice/OpenOffice calc я хотел бы просто иметь возможность выбирать диапазон ячеек, а когда выполняется макрос, для всех данных ячейки (например, как некоторый итерируемый объект) который можно получить в скрипте python, чтобы его можно было манипулировать. Я почти ничего не нашел в документации, и хотел бы приветствовать некоторый пример кода, который демонстрирует, как это сделать.Как вы можете извлечь выбранный диапазон ячеек в LibreOffice calc через pyuno?

ответ

0

После очень болезненного времени проб и ошибок (благодаря скудной документации и примерам использования пиню в любом месте - пожалуйста, исправьте меня, если я что-то упустил), я получил следующий код, который, кажется, делает то, что Я после того, как:

import uno 
doc = XSCRIPTCONTEXT.getDocument() 

def mymodule(): 
    ctrlr = doc.CurrentController 
    sel = ctrlr.getSelection() 
    x = sel.getDataArray() 
    # now the data is available as nested tuples in x, so do something with it 
    file('/tmp/out', 'w').write(repr(x)) 

Это можно поместить в файл питона, и хранятся (по крайней мере с Ubuntu 14.04) в директории ~/.config/libreoffice/4/user/Scripts/python, а затем, пока установлен пакет libreoffice-script-provider-python, он может быть запущен изнутри LibreOffice Calc через Инструменты-> Макросы-> Запустить макрос пункт меню. Или это может быть связано с сочетанием клавиш, используя диалог Tools-> Customize-> Keyboard.

Для получения более полного примера, позволяющего загружать данные из LibreOffice Calc в Octave для дальнейшего анализа, см. this pyuno script.

0

Или вы можете попробовать что-то вроде этого, что, я думаю, более легко понять.

desktop = XSCRIPTCONTEXT.getDesktop() 
    model = desktop.getCurrentComponent() 
    try: 
     sheets = model.getSheets() 
    except AttributeError: 
     raise Exception("This script is for Calc Spreadsheets only") 
    #sheet = sheets.getByName('Sheet1') 
    sheet = model.CurrentController.getActiveSheet() 
    oSelection = model.getCurrentSelection() 
    oArea = oSelection.getRangeAddress() 
    first_row = oArea.StartRow 
    last_row = oArea.EndRow 
    first_col = oArea.StartColumn 
    last_col = oArea.EndColumn 

 Смежные вопросы

  • Нет связанных вопросов^_^