OpenOffice.org Calc でセルの選択範囲に合わせたサイズで画像を埋め込むマクロ
7月 4th, 2009
みようみまねで OpenOffice.org 用に
表示されるダイアログで選択した画像を
セルの選択範囲に合わせたサイズで埋め込むマクロをかいてみた。
ちょっとしたテンプレートを用意して
ツールバーに登録しちゃえば
ちょっとしたアルバム?作りに便利かも。
'セルの選択範囲に合わせたサイズで画像を埋め込む
'本家 http://docs.sun.com/app/docs/doc/819-1332/faaim?a=view
'画像の埋め込み http://hermione.s41.xrea.com/pukiwiki/index.php?OOoBasic%2FDraw%2FShapes
'画像サイズ http://hermione.s41.xrea.com/pukiwiki/pukiwiki.php?OOoBasic%2FGeneric%2FImage
sub InsFitP
'範囲の取得
dim oDoc as object
dim oRange as object
oDoc = StarDesktop.CurrentComponent 'このコードを実行しているドキュメントを返す
oRange = oDoc.CurrentSelection
If not oRange.supportsService("com.sun.star.sheet.SheetCellRange") Then exit sub
'ダイアログを利用して画像ファイルの URL を取得
dim oDlg as object
dim sFiles() as string
dim sURL as string
oDlg = createUnoService("com.sun.star.ui.dialogs.FilePicker")
with oDlg
' .SetDisplayDirectory = "C:\"
' .SetDefaultName = "hehe"
.AppendFilter("JPEG (*.jpg,*.jpeg)", "*.jpg", "*.jpeg")
.AppendFilter("すべてのファイル", "*.*")
end with
if 1 <> oDlg.Execute then
oDlg = Nothing
exit sub
endif
sFiles = oDlg.getFiles()
sURL = sFiles(0)
' msgbox ConvertFromURL(sURL)
'画像の読み込みとサイズの取得
dim oGP as object
dim aArgs(0) as new com.sun.star.beans.PropertyValue
dim oG as object
dim aSize as new com.sun.star.awt.Size 'aSize = createUnoStruct("com.sun.star.awt.Size") でも可
oGP = createUnoService("com.sun.star.graphic.GraphicProvider")
aArgs(0).Name = "URL"
aArgs(0).Value = sURL
oG = oGP.queryGraphic(aArgs)
aSize = oG.SizePixel
'msgbox oG.DBG_Properties
'aSize = oG.Size100thMM
'msgbox aSize.Width ←何故か 0
'図オブジェクトの作成
dim oDoc as object
dim oShape as object
oDoc = StarDesktop.CurrentComponent 'このコードを実行しているドキュメントを返す
oShape = oDoc.createInstance("com.sun.star.drawing.GraphicObjectShape")
'図形オブジェクトのサイズと位置を調整
dim aPoint as new com.sun.star.awt.Point
dim margin as long
dim w as double
dim h as double
dim pw as double
dim ph as double
margin = 30
w = oRange.Size.Width - 2 * margin
h = oRange.Size.Height - 2 * margin
pw = w / aSize.Width
ph = h / aSize.Height
if pw < ph then
aSize.Width = w
aSize.Height = pw * aSize.Height
else
aSize.Width = ph * aSize.Width
aSize.Height = h
endif
aPoint.X = oRange.Position.X + (oRange.Size.Width - aSize.Width) / 2
aPoint.Y = oRange.Position.Y + (oRange.Size.Height - aSize.Height) / 2
oShape.setPosition(aPoint)
oShape.setSize(aSize)
oShape.Graphic = oG
'ページに埋め込む
dim oSheet as object
dim oPage as object
oSheet = oDoc.CurrentController.ActiveSheet
oPage = oSheet.DrawPage
oPage.add(oShape)
end sub