*目次 [#ma3953e9]
#contents

*趣旨 [#rab278c5]
とりあえず必要かと思う情報をまとめ中

最近では、もっぱら、OpenOfficeよりもLibreOfficeを使っている

*マクロのリファレンス的ページ [#ee76a4ca]
http://calibreblo.blogspot.jp/

*目標 [#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

具体的なやり方

-OpenOffice.org マクロ>user>Standard>Mdule***を選択する(***はそれぞれ合わせる)

-関数欄から先に貼り付けたマクロを選びます


*ファイル操作関連 [#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

なので下記のページをみたらいいと思う。
http://calibreblo.blogspot.jp/


**内容 [#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で開けますし
>編集したければフォトショップでも何でもで開いて下さい。

***クリップボードに直接コピーする方法 [#o6b66aca]
http://macfan.jp/guide/2009/08/13/post_584.html

[command]+[Shift]+[control]+[4]を同時押しすると出来ることを最近知った。


***キャプチャソフト [#n986d930]
一応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

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS