以前からこのブログにもたまに書いていたが、LibreOffice Calc でサーバが吐き出したテキストファイルを読み込み集計、最後にその結果を元に印刷処理を行うマクロを Python で書いていたのだが、OpenOffice.org 系オフィススイーツの定番マクロ言語である Basic で書き直すことにした。
理由は色々あるので、別のエントリーにまとめようかな。
とりあえず、今日の日付をセルにセットするだけの簡単な処理を Python と Basic で書いてみたので貼っておく。どちらもまったく同じ動きをする。
def get_today(*args):doc = XSCRIPTCONTEXT.getDocument()# シートを選択sheet = doc.getSheets().getByName('Main')# 今日の日付の取得dt_now = (datetime.datetime.now()).strftime('%Y/%m/%d')# すでにセルに値が入っている時は更新するか確認するkaisai_nengetsu = sheet.getCellRangeByName('C3')if kaisai_nengetsu.String:msg_box = Bridge()res = msg_box.run_querydialog(title='開催年月日セット', message='すでに値がセットされています。\n上書きでセットしますか?')# res=2 はい res=3 いいえif res != 2: # 「はい」でなければ終了returnkaisai_nengetsu.String = dt_now
次に Basic で書かれたマクロ。
Option CompatibleSub get_now_dateDim objDoc As ObjectDim objSheet As ObjectDim objCell As ObjectobjDoc = StarDesktop.CurrentComponentobjSheet = objDoc.Sheets.getByName("Main")' 既にセルに値が入っていたら、上書きするかを聞くobjCell = objSheet.getCellRangeByName("C3")If objCell.String <> "" ThenIf MsgBox ("すでに値がセットされています。" & vbCrLf & "上書きでセットしますか?", 292, "開催年月日セット") = 7 Then' いいえのボタンが押された場合returnEnd IfEnd If' 現在時刻の取得objCell.String = Format(Now(), "yyyy/mm/dd")End Sub
以上。まあ、これだけ簡単な処理では特にどっちの言語で書いてもなんの問題もない。
見比べてもあまりおもしろいもんじゃないな(笑)
<追記>
コメントで「文字列リテラル中の \n は効かない」ということを教えていただきましたので、Option Compatible を指定して VBA compatibility モードをオンにし、vbCrLf 定数を連結する形に修正しました。16進文字"\x0D\x0A"を直打ちでもよさげですが、ついでに VBA compatibility モードを試してみたかったので。
StarBasicやVBAでは文字列リテラル中に改行文字をエスケープシーケンスで入れることができない(ぉ
ご指摘、ありがとうございます。
昨夜は眠気に負けてしっかり確認していませんでしたが(それと老眼で(^^;)、確かに改行していない・・・
取り急ぎ修正しました。
またいろいろとご教授いただければ幸いです。