2

LibreOffice / OpenOffice calc python マクロで pyuno を使用する場合、単純にセルの範囲を選択できるようにしたいのですが、マクロを実行すると、すべてのセル データ (たとえば反復可能なオブジェクト) を選択できるようになります。操作できるように、python スクリプト内で取得できます。これに関するドキュメントはほとんど見つかりませんでした。これを行う方法を示すサンプル コードを歓迎します。

4

2 に答える 2

3

試行錯誤の非常に苦痛な時間の後 (pyuno の使用に関する乏しいドキュメントと例のおかげで、何かを見落としていた場合は修正してください)、私が求めていることを行うように見える次のコードになりました。 :

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

これを python ファイルに入れ、(少なくとも Ubuntu 14.04 では) ディレクトリに保存し、パッケージがインストールされ~/.config/libreoffice/4/user/Scripts/pythonている限り、 LibreOffice Calc 内から[ツール] -> [マクロ] -> [マクロの実行]を介して実行できます。メニューオプション。または、[ツール] → [カスタマイズ] → [キーボード] ダイアログを使用して、キーボード ショートカットにバインドすることもできます。libreoffice-script-provider-python

さらなる分析のために LibreOffice Calc から Octave にデータをロードできる、より完全な例については、この pyuno scriptを参照してください。

于 2015-02-18T21:27:03.383 に答える
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
于 2015-03-06T16:33:49.110 に答える