Open Office Basic




     2009/7/30
       変ゼミ
       inajob
OpenOfficeBasicとは
OpenOffice版 VBA
 OpenOfficeの作業を自動化できる
 いくつかの言語から選べるらしい
   OpenOfficeBasic
   Python
   JavaScript
   Jav...
IDEを起動
見た目は普通
 キーワードハイライト
  遅い
 ウォッチ
  重い
  良く落ちる
  メソッドは見えない?
 ブレークポイント
 ステップ実行
 コード補完はない
言語仕様とか
しっかり見てないんだけど
VBAと似ているがAPIは完全に別のもの
 例外は無視して次の行にいくか、例外ラベルにジャンプ
 サブルーチンとファンクション
 宣言なしでいきなり変数に代入(抑制も可能)
 IF,FORなどの制御構文
APIとか
大半の機能はAPIでライブラリになっている
  リファレンスはWebにある(読みにくい)
  コンテキスト非依存型サービス
      createUnoService
  コンテキスト依存型サービス
      createIns...
プログラム
 oDoc = ThisComponent
 oDrawPage = oDoc.getDrawPages().getByIndex(0)
 oController = oDoc.getCurrentController()
 oSe...
普通の使い方
Calcで作業を記録し実行(like キーボードマクロ)
 さらに出力されたプログラムを見て少し変更する等
 Oooは普通のAPIを用いたプログラムではなくコマンド列を作る
   だけなのであまり再利用できない
 Impressや...
何を作ろうか
ソフトシャドウ
 MSOfficeの新しいやつには搭載されている
 うらやましいのでやってみよう
手順
手で作業してためしにやってみる
各操作をプログラムに書き起こす
 VBAはここを自動でやってくれるがOooBasicはCalc,Writerの一
  部の機能のみ一応やってくれるだけ
APIにある機能はそっちを使い、無い場合はコマンド一覧...
できた!
●   とりあえずそれっぽいものができましたよ
    ●
        (さっきからつかってたけど)
流れ
対象オブジェクトをコピー
貼り付け(対象オブジェクトが2つになる)
対象オブジェクトを覆う白い四角形を作成
対象オブジェクトのひとつを最前面に移動
対象オブジェクトのひとつの色を黒くする
対象オブジェクトのひとつと四角形をグループ化し、ビ...
Sub shapes_rect_corner
On Error Resume Next
                                                  そーすこーど
 oDoc = ThisComponent...
今後の予定
もっと汎用的にする
白背景以外でも利用可能にする
透過属性をつける
Java,Python,JavaScriptなどのほかの言語でやる
参考URL
コマンド一覧
 http://wiki.services.openoffice.org/wiki/Framework/Article/OpenOffice.org_2.x_Commands

OooBasicでガントチャート
 ht...
Upcoming SlideShare
Loading in …5
×

OooBasic

2,175 views

Published on

OpenOfficeのマクロであるOpenOfficeBasicを用いて、ソフトシャドウを作ってみる

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,175
On SlideShare
0
From Embeds
0
Number of Embeds
93
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

OooBasic

  1. 1. Open Office Basic 2009/7/30 変ゼミ inajob
  2. 2. OpenOfficeBasicとは OpenOffice版 VBA OpenOfficeの作業を自動化できる いくつかの言語から選べるらしい OpenOfficeBasic Python JavaScript Java BeanShell とりあえず基本っぽいOpenOfficeBasicに挑戦
  3. 3. IDEを起動 見た目は普通 キーワードハイライト 遅い ウォッチ 重い 良く落ちる メソッドは見えない? ブレークポイント ステップ実行 コード補完はない
  4. 4. 言語仕様とか しっかり見てないんだけど VBAと似ているがAPIは完全に別のもの 例外は無視して次の行にいくか、例外ラベルにジャンプ サブルーチンとファンクション 宣言なしでいきなり変数に代入(抑制も可能) IF,FORなどの制御構文
  5. 5. APIとか 大半の機能はAPIでライブラリになっている リファレンスはWebにある(読みにくい) コンテキスト非依存型サービス createUnoService コンテキスト依存型サービス createInstance それ以外の機能は「コマンド」により行う コマンドって何? dispatcher.executeDispatch(oController.Frame, ".uno:Copy", "", 0, Array()) dispatcher.executeDispatch(oController.Frame, ".uno:Paste", "", 0, Array()) dispatcher.executeDispatch(oController.Frame, ".uno:BringToFront", "", 0, Array())
  6. 6. プログラム oDoc = ThisComponent oDrawPage = oDoc.getDrawPages().getByIndex(0) oController = oDoc.getCurrentController() oSelection = oController.getSelection().getByIndex(0) dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") ' ==constants== margin = 1000 offset = 100 ' ============ dispatcher.executeDispatch(oController.Frame, ".uno:Copy", "", 0, Array()) dispatcher.executeDispatch(oController.Frame, ".uno:Paste", "", 0, Array()) orgObj = oDrawPage.getByIndex(oDrawPage.count - 1) oRectShape = oDoc.createInstance("com.sun.star.drawing.RectangleShape") aPoint = CreateUnoStruct("com.sun.star.awt.Point") aSize = CreateUnoStruct("com.sun.star.awt.Size") aPoint.X = oSelection.Position.X - margin/2 aPoint.Y = oSelection.Position.Y - margin/2 aSize.Width = oSelection.Size.Width + margin ・・・・・
  7. 7. 普通の使い方 Calcで作業を記録し実行(like キーボードマクロ) さらに出力されたプログラムを見て少し変更する等 Oooは普通のAPIを用いたプログラムではなくコマンド列を作る だけなのであまり再利用できない ImpressやDrawではこの機能はつかない Calcでのユーザ定義関数 引数をとり結果を返すもの Calcでの作業に利用できる
  8. 8. 何を作ろうか ソフトシャドウ MSOfficeの新しいやつには搭載されている うらやましいのでやってみよう
  9. 9. 手順 手で作業してためしにやってみる 各操作をプログラムに書き起こす VBAはここを自動でやってくれるがOooBasicはCalc,Writerの一 部の機能のみ一応やってくれるだけ APIにある機能はそっちを使い、無い場合はコマンド一覧 からそれっぽいものを探す なんかもっといい方法がありそうなものだが
  10. 10. できた! ● とりあえずそれっぽいものができましたよ ● (さっきからつかってたけど)
  11. 11. 流れ 対象オブジェクトをコピー 貼り付け(対象オブジェクトが2つになる) 対象オブジェクトを覆う白い四角形を作成 対象オブジェクトのひとつを最前面に移動 対象オブジェクトのひとつの色を黒くする 対象オブジェクトのひとつと四角形をグループ化し、ビット マップ化する ぼかしエフェクトを数回かけて少し右下にずらす 残った対象オブジェクトを最前面に移動 赤文字はコマンド 黒文字はAPI
  12. 12. Sub shapes_rect_corner On Error Resume Next そーすこーど oDoc = ThisComponent oController = oDoc.getCurrentController() oDrawPage = oController.currentPage 'oDoc.getDrawPages().getByIndex(1) oSelection = oController.getSelection().getByIndex(0) dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") ' ==constants== margin = 1000 offset = 100 ' ============ dispatcher.executeDispatch(oController.Frame, ".uno:Copy", "", 0, Array()) dispatcher.executeDispatch(oController.Frame, ".uno:Paste", "", 0, Array()) orgObj = oDrawPage.getByIndex(oDrawPage.count - 1) ' 退避 oRectShape = oDoc.createInstance("com.sun.star.drawing.RectangleShape") dispatcher.executeDispatch(oController.Frame, ".uno:BringToFront", "", 0, Array()) aPoint = CreateUnoStruct("com.sun.star.awt.Point") aSize = CreateUnoStruct("com.sun.star.awt.Size") oShapes = createUnoService("com.sun.star.drawing.ShapeCollection") aPoint.X = oSelection.Position.X - margin/2 oShapes.add(oRectShape) aPoint.Y = oSelection.Position.Y - margin/2 oShapes.add(oSelection) aSize.Width = oSelection.Size.Width + margin og = oDrawPage.group( oShapes ) aSize.Height = oSelection.Size.Height + margin oController.select(og) oRectShape.setPosition(aPoint) dispatcher.executeDispatch(oController.Frame, ".uno:ConvertIntoBitmap", "", 0, Array()) oRectShape.setSize(aSize) obj = oDrawPage.getByIndex(oDrawPage.count - 1) ' reselect oRectShape.CornerRadius = 0 oRectShape.fillColor = 16777215 'FFFFFF aPoint = CreateUnoStruct("com.sun.star.awt.Point") oRectShape.lineStyle = 0 aPoint.X = obj.Position.X + offset aPoint.Y = obj.Position.Y + offset oDrawPage.add(oRectShape) obj.setPosition(aPoint) oController.select(oSelection) oController.select(obj) if Not IsNull(oSelection.fillColor) then For i = 1 To 20 oSelection.fillColor = 0 ' BLACK dispatcher.executeDispatch(oController.Frame, ".uno:GraphicFilterSmooth", "", 0, Array() end if Next i oController.select(orgObj) dispatcher.executeDispatch(oController.Frame, ".uno:BringToFront", "", 0, Array()) End Sub
  13. 13. 今後の予定 もっと汎用的にする 白背景以外でも利用可能にする 透過属性をつける Java,Python,JavaScriptなどのほかの言語でやる
  14. 14. 参考URL コマンド一覧 http://wiki.services.openoffice.org/wiki/Framework/Article/OpenOffice.org_2.x_Commands OooBasicでガントチャート http://shinob.blog42.fc2.com/ OpenOffice.org BASIC覚え書き http://www.geocities.jp/mix_dvd/ooobasic.html OpenOffice.org Basicマクロリファレンス http://itref.fc2web.com/openoffice/basic/index.html OOoBasic http://hermione.s41.xrea.com/pukiwiki/index.php?OOoBasic

×