2014年6月24日火曜日

OpenOffice Basic で Calc のセルに数字を入れてみる。

 おっしゃ。
 出来たついでに色々なパターンを試してみた。



Cell = Sheet.getCellByPosition(1, 20)
Cell.Value = 20
Cell = Sheet.getCellByPosition(2, 20)
Cell.Value = "21"
Cell = Sheet.getCellByPosition(3, 20)
Cell.String = 22


 数値をダブルクオーテーションでくくっても入力できた。
 制限はあるようだが文字列をダブルクオーテーションでくくらなくても入力できた。

 さて統一をしておきたいがどうすればいいのやら。

面白そうなサイトを見つけた。

 EXCEL VBAからOOo Basicへの移行について
http://freeopenoffice.jimdo.com/openoffice-org%E3%81%B8%E3%81%AE%E7%A7%BB%E8%A1%8C%E8%A7%A3%E8%AA%AC/

 ちょっと見に行ってくる。

 VBA との比較だった。
 VBA は詳しくないので残念ながら参考にならなかった。

 次に行こう。

OpenOffice Basic で Calc のセルに文字を入れてみる。

 実行前後のスクリーンショット。



 指定したセル A21 へ文字列を入れることが出来た。
 セルの指定が座標 0,20 になっているけれど見た目でわかるように A21 といった形で表現できないだろうか。

 実行したマクロは以下のとおり。

Option VBASupport 1

Sub TEST
Dim Doc As Object
Dim Sheet As Object
Dim NewColumn As Object

Doc = ThisComponent
Sheet = Doc.Sheets.getByName("Sheet7")

Cell = Sheet.getCellByPosition(0, 20)
Cell.String = "0,20"

End Sub


 今回のポイントは二点。

 まずは「Doc = ThisComponent」
 こうすることで Basic IDE から実行してもランタイムエラーが発生しなくなる。
 サンプルでよくある「Doc = StarDesktop.CurrentComponent」だと Basic IDE から実行するとランタイムエラーが発生する。
 プッシュボタンを作らなくてもマクロを実行することが出来るのでとても便利である。

 もう一つは「Sheet = Doc.Sheets.getByName("Sheet7")」
 シートの名称からシートを選択することが出来る。
 当初は getByName が抜けていて何回もマクロを実行しても反応がなかった。
 合っているとの思い込みがあったのでサンプルコードを何度も見返してようやく気がついたという次第。

 次は指定したセルに数字を入れてみよう。


 このマクロで気になっていた Option VBASupport 1 は VBA  コマンドを使えるようにするものらしい。
 目指すは脱 VBA なのでここは 0 にしておこう。

2014年6月23日月曜日

Calc でボタンをクリックしてマクロを動かす。

 マクロ自体は大したことはやっていないが Excel でやっているようにボタンを押したら動くようにした。

Rem Attribute VBA_ModuleType=VBADocumentModule
Option VBASupport 1

Sub TEST
Dim Doc As Object
Dim Sheet As Object
Dim NewColumn As Object

rem Doc = StarDesktop.CurrentComponent
Doc = ThisComponent
Sheet = Doc.Sheets("Sheet7")

msgbox "TEST"
End Sub


 まずは「表示」-「ツールバー」-「フォームコントロール」を選択する。

 するとフォームコントロールのウインドウが表示される。 

 デザインモードをオンにしてプッシュボタンを配置する。

 配置したプッシュボタンを右クリックしてメニューからコントロールを選択する。

 マクロセレクターなウインドウが表示されるので実行したいマクロを選択する。

 選択したマクロを動かすタイミングは実行時。
 マウスボタンを押した時ではダメなのだろうか。

 実行結果は予想通りで問題なし。

 今日は見えないところではなくて見栄えをいじったのでちょっと面白かった。
 

2014年6月22日日曜日

セルと範囲

https://wiki.openoffice.org/wiki/JA/Documentation/BASIC_Guide/Cells_and_Ranges

StarDesktop.CurrentComponent は現在のコンポーネントを返します。BASIC IDE で作業している場合、マクロを実行すると、BASIC IDE が返されます。BASIC IDE には表計算ドキュメントコンポーネントがないため、RunTime エラーが生成されます。

 今までは Basic 上だけのことだったの気にしていなかったけれど今度はセルをいじるためばっちりとハマりました。
 さてどうやって対応するんだろうか。

Excel&SQLite から Calc&Base へ行こうっと

 いまは Windows XP 上で Excel と MySQL で連携して作業しているものがある。
 これを脱 Windows XP と合わせて Calc と Base へ移行しようとしているわけだ。
 Calc はよく使っているが Basic と Base は使い始めたばかりでググってばかりだ。

 Excel では簡単なマクロを動かして MySQL へアクセスしているのでこれを Basic へ移行する必要がある。
 懸案となっていた Calc から Base へのアクセスはあっけなく出来た。
 次は Calc のワークシートやセルを操作する必要があるのでドキュメントを探してみた。

 たぶんここにある「表計算ドキュメント」を読み進めればいいのかな。
https://wiki.openoffice.org/wiki/JA/Documentation/BASIC_Guide/Spreadsheets

 読み進めていきたいところだけれども今日は時間切れなのでここまで。
 Ctrl + D でブックマークしておこう。

 別件で Excel と SQLite を使い始めているがこっちも Calc と Base で進めていったほうが楽になるかな。

 データベースといっても所詮は素人考えで Excel の表をそのまんまコピペしているだけ。
 昔は正規化うんぬんで悩んで結局何も出来なかったことから正規化とかは今やっていることが出来るようになってからの事としている。
 このことに気がつくまでだいぶ時間がかかってしまった。

 一人でやっていると泥沼にハマっていることに気が付かずそのまま進んでしまうのがアカンて。
 勉強会とかあったら参加したいものである。

UNO

 UNO って単語が OpenOffice のドキュメントで出てくるからカードゲームでもやるのかなと冗談交じりに思っていたら Universal Network Objects という重要なものであった。

 やっぱ短縮されていた言葉だったんだな。

脱 Excel を目指して続きを読んでいくか。
https://wiki.openoffice.org/wiki/JA/Documentation/BASIC_Guide/API_Intro

 今更ながら気がついたけど com.sun.star ってそういえば元は SUN の StarOffice だったっけ。

MELSECNET/HのリモートI/O局経由のMODBUS(R)通信について

http://fa-faq.mitsubishielectric.co.jp/faq/show/13661  別ネットワークの先にぶら下げるってどういうことだろう。