とりあえず必要かと思う情報をまとめ中
最近では、もっぱら、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
http://zze128.blog9.fc2.com/blog-entry-175.html
ファイルおよびディレクトリ (OpenOffice.org 実行時ライブラリ)
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
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
下記のアドレスでページがエラーだった。
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/
同じ内容のページを目的から検索するマクロのサンプルに一覧にしてあります。
http://zze128.blog9.fc2.com/blog-entry-175.html
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というのがある
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 '-------------------------------------------
http://oshiete.goo.ne.jp/qa/5720685.html
http://wiki.services.openoffice.org/wiki/Extensions_development_basic
http://gigazine.net/index.php?/news/comments/20071031_oxygenoffice_professional/
下記のURLから抜粋
http://okwave.jp/qa/q6115910.html
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
Free Softwareでいこう!! 「 OpenOffice.orgを使おう編 」
URL : http://openoffice3.web.fc2.com/
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