LibreOfficeのマクロはLibreOffice BASICが標準ですが、Pythonを使ってマクロを書くこともできます。
LibreOffice Calcの簡単なサンプル
シートとセルを選択して値を読み書きするだけのスクリプトです。
def sample():
ここで定義する名前がLibreOffice Calc上でも表示されることになります。
doc = XSCRIPTCONTEXT.getDocument()
シートの選択
名前から選択する場合
sheet = doc.getSheets().getByName('Sheet1')
インデックスから選択する場合
sheet = doc.getSheets().getByIndex(0)
アクティブシートを選択する場合
sheet = doc.CurrentController.getActiveSheet()
値の読み書き(数値バージョン)
A1
とB1
のセルの値を数字として読み取って、その値をC1
に入力します。
# C1 = A1 + B1
A1 = sheet.getCellRangeByName('A1')
B1 = sheet.getCellRangeByName('B1')
C1 = sheet.getCellRangeByName('C1')
C1.Value = A1.Value + B1.Value
値の読み書き(文字列バージョン)
左上を(0,0)
としたインデックスからセルを選択して、その値を文字列として扱います。
# C2 = A2 + B2
A2 = sheet.getCellByPosition(0, 1)
B2 = sheet.getCellByPosition(1, 1)
C2 = sheet.getCellByPosition(2, 1)
C2.String = A2.String + B2.String
指定したセルの値を読み書きするサンプルコード
#!/usr/bin/env python
# -*- coding: utf-8 -*-
def sample():
'''
数値としてA1 + B1の値をC1に代入
文字列としてA2 + B2の値をC2に代入
'''
doc = XSCRIPTCONTEXT.getDocument()
# シートを選択
#sheet = doc.getSheets().getByName('Sheet1')
#sheet = doc.getSheets().getByIndex(0)
sheet = doc.CurrentController.getActiveSheet()
# C1 = A1 + B1
A1 = sheet.getCellRangeByName('A1')
B1 = sheet.getCellRangeByName('B1')
C1 = sheet.getCellRangeByName('C1')
C1.Value = A1.Value + B1.Value
# C2 = A2 + B2
A2 = sheet.getCellByPosition(0, 1)
B2 = sheet.getCellByPosition(1, 1)
C2 = sheet.getCellByPosition(2, 1)
C2.String = A2.String + B2.String
実行結果