[Calc] 図形のサイズを変える

概要

com.sun.star.drawing.GraphicShapeObjectの大きさを変える。

環境

OpenOffice.org Calc 3.0.0

コード

目的

別記事「[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

ところで

数値変数の型の最大値と最小値はどこかに定数として用意されているのでしょうか?

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

概要

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

環境

OpenOffice.org Calc 3.0.0

コード

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