目次

趣旨

とりあえず必要かと思う情報をまとめ中

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

マクロのリファレンス的ページ

http://calibreblo.blogspot.jp/

目標

Macでキャプチャした画像を貼付ける一連の操作を高速化し、エビデンス取得ツールとして 活用できるレベルまでにマクロを組む。

結果

概要

Macの場合を想定した作りになっており、 キャプチャすると出来上がるファイルをシートに張付け、それなりのサイズに大きさを整えます。

で、キャプチャして出来上がったファイルは削除します。

使い方は、下記のコードでキャプチャされてできる画像ファイルのパスがSub Mainに記載されているので、 そこを、それぞれのコードに置き換えればオッケーです。

あとは、ショートカットに割当れば、快適につかえます。

コード

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を参考にする。

http://zze128.blog9.fc2.com/blog-entry-175.html

具体的なやり方

ファイル操作関連

ファイルおよびディレクトリ (OpenOffice.org 実行時ライブラリ)

参考URL

http://wiki.services.openoffice.org/wiki/JA/Documentation/BASIC_Guide/Files_and_Directories_(Runtime_Library)

記事内容

ファイル選択ダイアログを開き、選択された画像を挿入する

参考URL

http://kaede.blog.abk.nu/&category?cat=%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0::OOo%20Basic

概要

メニュー「挿入 - 画像 - ファイルから」に相当するマクロ

コード

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

図形のサイズを変える

参考URL

http://kaede.blog.abk.nu/&category?cat=%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0::OOo%20Basic

コード

目的

別記事「[Calc] ファイル選択ダイアログを開き、選択された画像を挿入する」にて挿入した画像を、アスペクト比を保ちながらサイズの変更を行う。 上記の別記事中のマクロに続いて処理を実行させる場合、挿入された画像のDrawPage?オブジェクトのインデックスは、対象シート中のDrawPage?オブジェクトの中で最大となる。このため、処理対象画像の選択はインデックスにて判定(最大のインデックス値を持つ画像を対象)を行っている。

コード本体

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

情報検索リンク

http://www.oooforum.org/forum/search.phtml

図形描画ドキュメントの構造

http://wiki.services.openoffice.org/wiki/JA/Documentation/BASIC_Guide/Structure_of_Drawings

OOoBasic?でつくるマクロのカケラ (作成中)

URL

下記のアドレスでページがエラーだった。

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/

内容

同じ内容のページを目的から検索するマクロのサンプルに一覧にしてあります。

OpenOffice/Calcでエクセルの様に日付、時刻を自動入力するマクロ

http://zze128.blog9.fc2.com/blog-entry-175.html

Macでキャプチャした画像を貼付けるまで

参考URL

http://www.tohoho-web.com/lng/199911/99110324.htm

MACの場合はシフトキー+コマンド+4の同時押しで

バッテンカーソルが出るので取り込みたい画面を

ドラッグすればハードディスクにSimpletextのPICT画像として

保存されます。

普通にダブルクリックすれば Simpletextで開けますし

編集したければフォトショップでも何でもで開いて下さい。

クリップボードに直接コピーする方法

http://macfan.jp/guide/2009/08/13/post_584.html

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

キャプチャソフト

一応Macにはキャプチャソフトとして

Jingというのがある

Jing

URL

http://www.techsmith.com/download/jing/thankyou.asp?type=mac

「選択中の結合セルからサイズを取得する方法」

セルカーソルというものを使うことで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

http://oshiete.goo.ne.jp/qa/5720685.html

APIとかくわしそうなサイト

http://wiki.services.openoffice.org/wiki/Extensions_development_basic

OpenOffice.orgのクリップアート数を劇的に増量する方法

http://gigazine.net/index.php?/news/comments/20071031_oxygenoffice_professional/

Impressのマクロの情報

下記のURLから抜粋

http://okwave.jp/qa/q6115910.html

Slide Page2にAccessする場合。

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情報源

Free Softwareでいこう!! 「 OpenOffice.orgを使おう編 」

URL : http://openoffice3.web.fc2.com/

ThisDocument?のタイプをしらべるサンプル

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
Last-modified: 2015-07-09 (木) 16:41:45 (3204d)