C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

仕方なく、OOoBasicをやってみました1

業務を行う際、21世紀らしからぬ(全員で裏紙に記入する)作業があります。
この下らない行為を、Excelのマクロで改善してしまえ! と思い
マクロを作成することに。

ところが、社内のPCを見るとExcelのライセンスが不足しており、Excel
OpenOfficeCalcが混在状態。 両方の2本立てでスタートしたのですが、
レイアウトの食い違いが出たりするため
OpenOfficeCalcのみ(インストールされていないPCにもインストールしろ と言う強行策)
で行うことにしました。


OpenOfficeのマクロは作成した経験が無く、かなり手探り状態でした。
試しにA1のセルを選択し、"A"を入力しただけを記録するとこんな感じです。

'OOoBasic
REM  *****  BASIC  *****

sub Main
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$1"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "StringName"
args2(0).Value = "A"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args2())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:JumpToNextCell", "", 0, Array())

end sub

ちょっと愕然としました。 "dim" や "as" と言った見慣れたものはあるものの、
毎回1個だけのobject型の配列を宣言しなきゃならないのかよ・・・と。
(サンスターってハミガキか? とか)


調べてみると、結構VBAと互換性を持たせているようで、こんな感じで
同じことが出来ることがわかりました。

'OOoBasic
sub Main
  ThisComponent.Sheets(0).getCellByPosition(0,0).String = "A"
end sub

これぐらいであれば、何とかいけそうな雰囲気です。