SlideShare a Scribd company logo
1 of 14
Download to read offline
Open Office Basic




     2009/7/30
       変ゼミ
       inajob
OpenOfficeBasicとは
OpenOffice版 VBA
 OpenOfficeの作業を自動化できる
 いくつかの言語から選べるらしい
   OpenOfficeBasic
   Python
   JavaScript
   Java
   BeanShell

              とりあえず基本っぽいOpenOfficeBasicに挑戦
IDEを起動
見た目は普通
 キーワードハイライト
  遅い
 ウォッチ
  重い
  良く落ちる
  メソッドは見えない?
 ブレークポイント
 ステップ実行
 コード補完はない
言語仕様とか
しっかり見てないんだけど
VBAと似ているがAPIは完全に別のもの
 例外は無視して次の行にいくか、例外ラベルにジャンプ
 サブルーチンとファンクション
 宣言なしでいきなり変数に代入(抑制も可能)
 IF,FORなどの制御構文
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())
プログラム
 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
・・・・・
普通の使い方
Calcで作業を記録し実行(like キーボードマクロ)
 さらに出力されたプログラムを見て少し変更する等
 Oooは普通のAPIを用いたプログラムではなくコマンド列を作る
   だけなのであまり再利用できない
 ImpressやDrawではこの機能はつかない
Calcでのユーザ定義関数
 引数をとり結果を返すもの
 Calcでの作業に利用できる
何を作ろうか
ソフトシャドウ
 MSOfficeの新しいやつには搭載されている
 うらやましいのでやってみよう
手順
手で作業してためしにやってみる
各操作をプログラムに書き起こす
 VBAはここを自動でやってくれるがOooBasicはCalc,Writerの一
  部の機能のみ一応やってくれるだけ
APIにある機能はそっちを使い、無い場合はコマンド一覧
 からそれっぽいものを探す
 なんかもっといい方法がありそうなものだが
できた!
●   とりあえずそれっぽいものができましたよ
    ●
        (さっきからつかってたけど)
流れ
対象オブジェクトをコピー
貼り付け(対象オブジェクトが2つになる)
対象オブジェクトを覆う白い四角形を作成
対象オブジェクトのひとつを最前面に移動
対象オブジェクトのひとつの色を黒くする
対象オブジェクトのひとつと四角形をグループ化し、ビット
 マップ化する
ぼかしエフェクトを数回かけて少し右下にずらす
残った対象オブジェクトを最前面に移動

             赤文字はコマンド 黒文字はAPI
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
今後の予定
もっと汎用的にする
白背景以外でも利用可能にする
透過属性をつける
Java,Python,JavaScriptなどのほかの言語でやる
参考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

More Related Content

Similar to OooBasic

関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)啓 小笠原
 
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oFメディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oFAtsushi Tadokoro
 
Leap Motion - 1st Review
Leap Motion - 1st ReviewLeap Motion - 1st Review
Leap Motion - 1st ReviewTsukasa Sugiura
 
Opencv object detection_takmin
Opencv object detection_takminOpencv object detection_takmin
Opencv object detection_takminTakuya Minagawa
 
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和schoowebcampus
 
Segue, Landscape, Touch events, Alpha and User Defined Runtime Attributes
Segue, Landscape, Touch events, Alpha and User Defined Runtime AttributesSegue, Landscape, Touch events, Alpha and User Defined Runtime Attributes
Segue, Landscape, Touch events, Alpha and User Defined Runtime AttributesYutaka Yasuda
 
Xamarin で ReactiveUI を使ってみた
Xamarin で ReactiveUI を使ってみたXamarin で ReactiveUI を使ってみた
Xamarin で ReactiveUI を使ってみたHironov OKUYAMA
 
[Excel VBA] Convert a sheet to Markdown file.
[Excel VBA] Convert a sheet to Markdown file.[Excel VBA] Convert a sheet to Markdown file.
[Excel VBA] Convert a sheet to Markdown file.Sakai Memoru
 
速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-Kazunari Hara
 
Functional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.jsFunctional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.jsShogo Sensui
 
個人開発したモバイルアプリを紹介したパワポ資料です。転職活動時にポートフォリオとして使用しました。
個人開発したモバイルアプリを紹介したパワポ資料です。転職活動時にポートフォリオとして使用しました。個人開発したモバイルアプリを紹介したパワポ資料です。転職活動時にポートフォリオとして使用しました。
個人開発したモバイルアプリを紹介したパワポ資料です。転職活動時にポートフォリオとして使用しました。ssusere75907
 
みんな大好き! Hello, World
みんな大好き! Hello, Worldみんな大好き! Hello, World
みんな大好き! Hello, WorldNaohiro Aota
 
探検!SwiftyJSON
探検!SwiftyJSON探検!SwiftyJSON
探検!SwiftyJSONYuka Ezura
 
Angular js はまりどころ
Angular js はまりどころAngular js はまりどころ
Angular js はまりどころAyumi Goto
 

Similar to OooBasic (20)

関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
 
Arctic.js
Arctic.jsArctic.js
Arctic.js
 
Lt 111217
Lt 111217Lt 111217
Lt 111217
 
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oFメディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
 
Leap Motion - 1st Review
Leap Motion - 1st ReviewLeap Motion - 1st Review
Leap Motion - 1st Review
 
Opencv object detection_takmin
Opencv object detection_takminOpencv object detection_takmin
Opencv object detection_takmin
 
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
 
JavaScript入門
JavaScript入門JavaScript入門
JavaScript入門
 
Segue, Landscape, Touch events, Alpha and User Defined Runtime Attributes
Segue, Landscape, Touch events, Alpha and User Defined Runtime AttributesSegue, Landscape, Touch events, Alpha and User Defined Runtime Attributes
Segue, Landscape, Touch events, Alpha and User Defined Runtime Attributes
 
Xamarin で ReactiveUI を使ってみた
Xamarin で ReactiveUI を使ってみたXamarin で ReactiveUI を使ってみた
Xamarin で ReactiveUI を使ってみた
 
[Excel VBA] Convert a sheet to Markdown file.
[Excel VBA] Convert a sheet to Markdown file.[Excel VBA] Convert a sheet to Markdown file.
[Excel VBA] Convert a sheet to Markdown file.
 
速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-
 
Gurobi python
Gurobi pythonGurobi python
Gurobi python
 
Functional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.jsFunctional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.js
 
個人開発したモバイルアプリを紹介したパワポ資料です。転職活動時にポートフォリオとして使用しました。
個人開発したモバイルアプリを紹介したパワポ資料です。転職活動時にポートフォリオとして使用しました。個人開発したモバイルアプリを紹介したパワポ資料です。転職活動時にポートフォリオとして使用しました。
個人開発したモバイルアプリを紹介したパワポ資料です。転職活動時にポートフォリオとして使用しました。
 
みんな大好き! Hello, World
みんな大好き! Hello, Worldみんな大好き! Hello, World
みんな大好き! Hello, World
 
Processing
ProcessingProcessing
Processing
 
JavaFX 2.0 への誘い
JavaFX 2.0 への誘いJavaFX 2.0 への誘い
JavaFX 2.0 への誘い
 
探検!SwiftyJSON
探検!SwiftyJSON探検!SwiftyJSON
探検!SwiftyJSON
 
Angular js はまりどころ
Angular js はまりどころAngular js はまりどころ
Angular js はまりどころ
 

More from ina job

KubeWeekly読書メモの紹介
KubeWeekly読書メモの紹介KubeWeekly読書メモの紹介
KubeWeekly読書メモの紹介ina job
 
僕の 技術の無駄遣いを 紹介します
僕の 技術の無駄遣いを 紹介します僕の 技術の無駄遣いを 紹介します
僕の 技術の無駄遣いを 紹介しますina job
 
シェル入門
シェル入門シェル入門
シェル入門ina job
 
Voice remix!
Voice remix!Voice remix!
Voice remix!ina job
 
Mustache入門
Mustache入門Mustache入門
Mustache入門ina job
 
MTM07で電子楽器を展示してきた
MTM07で電子楽器を展示してきたMTM07で電子楽器を展示してきた
MTM07で電子楽器を展示してきたina job
 
Erlangやってみた
ErlangやってみたErlangやってみた
Erlangやってみたina job
 
SVNのすすめ&Redmineでプロジェクト管理
SVNのすすめ&Redmineでプロジェクト管理SVNのすすめ&Redmineでプロジェクト管理
SVNのすすめ&Redmineでプロジェクト管理ina job
 
ICFP2009-いかにして我々は戦ったか
ICFP2009-いかにして我々は戦ったかICFP2009-いかにして我々は戦ったか
ICFP2009-いかにして我々は戦ったかina job
 
context free art
context free artcontext free art
context free artina job
 
WxHaskell
WxHaskellWxHaskell
WxHaskellina job
 
webを飾る技術
webを飾る技術webを飾る技術
webを飾る技術ina job
 

More from ina job (12)

KubeWeekly読書メモの紹介
KubeWeekly読書メモの紹介KubeWeekly読書メモの紹介
KubeWeekly読書メモの紹介
 
僕の 技術の無駄遣いを 紹介します
僕の 技術の無駄遣いを 紹介します僕の 技術の無駄遣いを 紹介します
僕の 技術の無駄遣いを 紹介します
 
シェル入門
シェル入門シェル入門
シェル入門
 
Voice remix!
Voice remix!Voice remix!
Voice remix!
 
Mustache入門
Mustache入門Mustache入門
Mustache入門
 
MTM07で電子楽器を展示してきた
MTM07で電子楽器を展示してきたMTM07で電子楽器を展示してきた
MTM07で電子楽器を展示してきた
 
Erlangやってみた
ErlangやってみたErlangやってみた
Erlangやってみた
 
SVNのすすめ&Redmineでプロジェクト管理
SVNのすすめ&Redmineでプロジェクト管理SVNのすすめ&Redmineでプロジェクト管理
SVNのすすめ&Redmineでプロジェクト管理
 
ICFP2009-いかにして我々は戦ったか
ICFP2009-いかにして我々は戦ったかICFP2009-いかにして我々は戦ったか
ICFP2009-いかにして我々は戦ったか
 
context free art
context free artcontext free art
context free art
 
WxHaskell
WxHaskellWxHaskell
WxHaskell
 
webを飾る技術
webを飾る技術webを飾る技術
webを飾る技術
 

Recently uploaded

プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
OWASP Hardning Privacy セッション 「セキュリティの守るべきものとは情報とプライバシーへ」
OWASP Hardning Privacy セッション 「セキュリティの守るべきものとは情報とプライバシーへ」OWASP Hardning Privacy セッション 「セキュリティの守るべきものとは情報とプライバシーへ」
OWASP Hardning Privacy セッション 「セキュリティの守るべきものとは情報とプライバシーへ」Tetsuya Nihonmatsu
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 

Recently uploaded (7)

プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
U-22プログラミング・コンテスト2024 作品説明動画を制作するポイントを紹介
U-22プログラミング・コンテスト2024 作品説明動画を制作するポイントを紹介U-22プログラミング・コンテスト2024 作品説明動画を制作するポイントを紹介
U-22プログラミング・コンテスト2024 作品説明動画を制作するポイントを紹介
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
OWASP Hardning Privacy セッション 「セキュリティの守るべきものとは情報とプライバシーへ」
OWASP Hardning Privacy セッション 「セキュリティの守るべきものとは情報とプライバシーへ」OWASP Hardning Privacy セッション 「セキュリティの守るべきものとは情報とプライバシーへ」
OWASP Hardning Privacy セッション 「セキュリティの守るべきものとは情報とプライバシーへ」
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 

OooBasic