*目次 [#ma3953e9] #contents *趣旨 [#rab278c5] とりあえず必要かと思う情報をまとめ中 *目標 [#d31f82f1] Macでキャプチャした画像を貼付ける一連の操作を高速化し、エビデンス取得ツールとして 活用できるレベルまでにマクロを組む。 **結果 [#w97403cd] ***概要 [#o38ed6d0] Macの場合を想定した作りになっており、 キャプチャすると出来上がるファイルをシートに張付け、それなりのサイズに大きさを整えます。 で、キャプチャして出来上がったファイルは削除します。 使い方は、下記のコードでキャプチャされてできる画像ファイルのパスがSub Mainに記載されているので、 そこを、それぞれのコードに置き換えればオッケーです。 あとは、ショートカットに割当れば、快適につかえます。 ***コード [#cfb2c62b] REM ***** BASIC ***** Sub Main showFiles "/Users/hayashikuniyuki/Desktop/" End Sub Sub showFiles(captureDirPath As String) Dim NextFile As String Dim AllFiles As String Dim baseName As String 'AllFiles = "" baseName = captureDirPath NextFile = Dir(baseName, 0) While NextFile <> "" if len(NextFile) > 4 And right(NextFile,3) = "png" And left(NextFile,5) = "スクリーン" Then 'Dim Attr As Integer 'Attr = GetAttr(baseName & "/" & NextFile) insertPicture2 baseName & "/" & NextFile resizePicture baseName & "/" & NextFile kill (baseName & "/" & NextFile) 'msgbox Attr End if 'AllFiles = AllFiles & Chr(13) & NextFile NextFile = Dir Wend 'MsgBox AllFiles End Sub Sub insertPicture2(filename1 as String) dim oDoc as object, oDocFrame as object 'dim oDrawPage as object, oDrawPageObj as object 'dim dispatcher as object oDoc = ThisComponent oDocFrame = oDoc.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") dim args1(3) as new com.sun.star.beans.PropertyValue args1(0).Name = "FileName" args1(0).Value = filename1 '"file://tesla/images/674.png" args1(1).Name = "FilterName" args1(1).Value = "<All formats>" args1(2).Name = "AsLink" args1(2).Value = false args1(3).Name = "Style" args1(3).Value = "Graphics" dispatcher.executeDispatch(oDocFrame, ".uno:InsertGraphic", "", 0, args1()) End sub 'const MAX_WIDTH as Integer = 14000 ' 14cm 'const MAX_HEIGHT as Integer = 14000 Sub resizePicture dim sheet as Object dim drawPg as Object dim draw as Object sheet = ThisComponent.CurrentController.ActiveSheet drawPg = sheet.getDrawPage if drawPg.getCount > 0 then 'インデックスが最大のオブジェクトを対象とする draw = drawPg.getByIndex( drawPg.getCount - 1 ) else exit sub end if dim scale as double dim drawResize as new com.sun.star.awt.Size '拡大率を求める 'if draw.Size.Width > draw.Size.Height then '横長の場合 ' scale = MAX_WIDTH / draw.Size.Width 'else '縦長の場合 ' scale = MAX_HEIGHT / draw.Size.Height 'end if scale = 0.625 with drawResize .Width = draw.Size.Width * scale .Height = draw.Size.Height * scale end with draw.setSize(drawResize) 'End sub ***ショートカットの割当は下記のURLを参考にする。 [#p6b4a608] http://zze128.blog9.fc2.com/blog-entry-175.html *ファイル操作関連 [#ub432519] ファイルおよびディレクトリ (OpenOffice.org 実行時ライブラリ) **参考URL [#o27ff08f] http://wiki.services.openoffice.org/wiki/JA/Documentation/BASIC_Guide/Files_and_Directories_(Runtime_Library) **記事内容 [#sd949243] -ディレクトリ内のファイル検索 -ディレクトリの作成および削除 -ファイルのコピー、名前変更、削除および存在確認 -ファイル属性の読み取りと変更 最終変更日時、ファイルサイズなどのファイル属性 -テキストファイルへの書き込み -テキストファイルの読み取り *ファイル選択ダイアログを開き、選択された画像を挿入する [#zb2cbd05] **参考URL [#a728c86e] http://kaede.blog.abk.nu/&category?cat=%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0::OOo%20Basic **概要 [#i0a81e21] メニュー「挿入 - 画像 - ファイルから」に相当するマクロ **コード [#u686e363] sub insertPicture dim document as Object dim dispather as Object ' get access to the document document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") ' ファイル選択ダイアログの初期化 dim filePickerDlg as Object filePickerDlg = createUnoService("com.sun.star.ui.dialogs.FilePicker") filePickerDlg.appendFilter( _ "JPEG画像ファイル(*.jpg, *.jpeg)", "*.jpg", "*.jpeg") if filePickerDlg.execute = 1 then 'ファイルが指定された場合 dim selFiles() as String selFiles() = filePickerDlg.getFiles() dim picInfo(2) as new com.sun.star.beans.PropertyValue picInfo(0).Name = "FileName" picInfo(0).Value = selFiles(0) picInfo(1).Name = "FilterName" picInfo(1).Value = "JPEG - Joint Photograhpic Experts Group" picInfo(2).Name = "AsLink" picInfo(2).Value = false 'ダイアログで指定された画像をアクティブセルへ挿入 dispatcher.executeDispatch(document, ".uno:InsertGraphic", _ "", 0, picInfo()) end if end sub *図形のサイズを変える [#nee10b6f] **参考URL [#pa1602a6] http://kaede.blog.abk.nu/&category?cat=%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0::OOo%20Basic **コード [#oc978a0b] ***目的 [#e87f41e3] 別記事「[Calc] ファイル選択ダイアログを開き、選択された画像を挿入する」にて挿入した画像を、アスペクト比を保ちながらサイズの変更を行う。 上記の別記事中のマクロに続いて処理を実行させる場合、挿入された画像のDrawPageオブジェクトのインデックスは、対象シート中のDrawPageオブジェクトの中で最大となる。このため、処理対象画像の選択はインデックスにて判定(最大のインデックス値を持つ画像を対象)を行っている。 ***コード本体 [#id100346] const MAX_WIDTH as Integer = 10000 ' 10cm const MAX_HEIGHT as Integer = 10000 sub resizePicture dim sheet as Object dim drawPg as Object dim draw as Object sheet = ThisComponent.CurrentController.ActiveSheet drawPg = sheet.getDrawPage if drawPg.getCount > 0 then 'インデックスが最大のオブジェクトを対象とする draw = drawPg.getByIndex( drawPg.getCount - 1 ) else exit sub end if dim scale as double dim drawResize as new com.sun.star.awt.Size '拡大率を求める if draw.Size.Width > draw.Size.Height then '横長の場合 scale = MAX_WIDTH / draw.Size.Width else '縦長の場合 scale = MAX_HEIGHT / draw.Size.Height end if with drawResize .Width = draw.Size.Width * scale .Height = draw.Size.Height * scale end with draw.setSize(drawResize) end sub *情報検索リンク [#f064c825] http://www.oooforum.org/forum/search.phtml *図形描画ドキュメントの構造 [#m4e80213] http://wiki.services.openoffice.org/wiki/JA/Documentation/BASIC_Guide/Structure_of_Drawings *OOoBasicでつくるマクロのカケラ (作成中) [#k3a573db] **URL [#lbd8067a] http://oooug.jp/compati/basic/pukiwiki.php?%A5%DE%A5%AF%A5%ED%A4%CE%A5%AB%A5%B1%A5%E9 **内容 [#m540225a] 同じ内容のページを目的から検索するマクロのサンプルに一覧にしてあります。 -基本の基本 -記録マクロ -新しいドキュメントを作成する -指定のファイルを開く -開いているドキュメントのファイル名をリストアップする -ファイルを閉じる/変更を保存して閉じる -LBound関数とUBound関数を使ってもれなくループする -Len関数を使って文字列の長さに応じて処理を分岐する -文字列が日付として認識できるかどうかを調べる -いろいろなタイプの数値データを入力する -いろいろな文字データをセルに入力する -どのようなデータを数値と判断するか -選択範囲の列全体を取得し、列番号を表示する -関数を使って列番号を表示する -行列の表示/非表示 -1秒ごとの処理を10秒間実行する -指定時間10秒でループを抜ける -8個の配列要素から4個を順番に取り出す -多重ループを使ったソート(バブルソート) -単一セルのアドレスを表示(エラーハンドラ) -選択したセル範囲のアドレスを表示する -新しいシートを追加して名前をつける -シートの追加と削除 -ユーザー定義型変数 -マクロの中でシート関数を使う -画面の書き換えをストップする -ダイアログの操作 -リストボックスからアイテムを選択する -セルデータをリストボックスに表示する -イベント駆動型マクロ -イベント駆動型マクロ -シートを切り替えたときにコードを実行する -ダブルクリックしたときにコードを実行する -右クリックでマウスカーソルの位置を表示する -オブジェクトの操作 -ワークシート上のフォーム(ボタン)を取得する *OpenOffice/Calcでエクセルの様に日付、時刻を自動入力するマクロ [#qff66df5] http://zze128.blog9.fc2.com/blog-entry-175.html *Macでキャプチャした画像を貼付けるまで [#z9319136] **参考URL [#hd06ab03] http://www.tohoho-web.com/lng/199911/99110324.htm >MACの場合はシフトキー+コマンド+4の同時押しで >バッテンカーソルが出るので取り込みたい画面を >ドラッグすればハードディスクにSimpletextのPICT画像として >保存されます。 >普通にダブルクリックすれば Simpletextで開けますし >編集したければフォトショップでも何でもで開いて下さい。 一応Macにはキャプチャソフトとして Jingというのがある **Jing [#yd3d2d99] ***URL [#f2b5c3c5] http://www.techsmith.com/download/jing/thankyou.asp?type=mac *「選択中の結合セルからサイズを取得する方法」 [#ca10813e] セルカーソルというものを使うことでOOoBasicで実現できるようです。 '------------------------------------------- Sub mergedArea_Size Dim oSheet As Object Dim oCursor As Object Dim oSelection As Object oSheet =ThisComponent.CurrentController.ActiveSheet oSelection = ThisComponent.CurrentSelection oCursor = oSheet.createCursorByRange( oSelection ) oCursor.collapseToMergedArea() Dim w_len As Long Dim h_len As Long w_len = oCursor.Size.Width h_len = oCursor.Size.Height MsgBox "Width:" & w_len & " Height:" & h_len End Sub '------------------------------------------- **参考URL [#d6f786ea] http://oshiete.goo.ne.jp/qa/5720685.html *APIとかくわしそうなサイト [#a653961d] http://wiki.services.openoffice.org/wiki/Extensions_development_basic *OpenOffice.orgのクリップアート数を劇的に増量する方法 [#u1c7d25b] http://gigazine.net/index.php?/news/comments/20071031_oxygenoffice_professional/ *Impressのマクロの情報 [#g23429c2] 下記のURLから抜粋 http://okwave.jp/qa/q6115910.html -[ 推測 ] 単純にSlideのpage1にAccessする。 -[ 回答 ] **Slide Page2にAccessする場合。 [#tb32dbaf] Sub main Dim oDoc As Object Dim oPage oDoc = ThisComponent oPage = oDoc.getDrawPages().getByIndex(1) ' <= Page 1 1の場合は getByIndex(0)です。 End Sub 蛇足として以下を記します。 [ 参考 ] OpenOffice.org Basicではありませんが下記URLのJavaScript Macro *Impress情報源 [#s407214c] Free Softwareでいこう!! 「 OpenOffice.orgを使おう編 」 URL : http://openoffice3.web.fc2.com/ *ThisDocumentのタイプをしらべるサンプル [#e07c0786] sub main 'BasicLibraries.loadLibrary("XrayTool") 'xray thisComponent msgbox fnWhichComponent(thisComponent) end sub function fnWhichComponent(oDoc) as string if HasUnoInterfaces(oDoc, "com.sun.star.lang.XServiceInfo") then if oDoc.supportsService ("com.sun.star.text.GenericTextDocument") then fnWhichComponent = "Text" elseif oDoc.supportsService("com.sun.star.sheet.SpreadsheetDocument") then fnWhichComponent = "Spreadsheet" elseif oDoc.supportsService("com.sun.star.presentation.PresentationDocument") then fnWhichComponent = "Presentation" elseif oDoc.supportsService("com.sun.star.drawing.GenericDrawingDocument") then fnWhichComponent = "Drawing" else fnWhichComponent = "Oops current document something else" end if else fnWhichComponent = "Not a document" end if End function