2010年10月03日

OpenOffice.org Calc 貼付の改良マクロ

 OpenOffice.org Calcのマクロで、またちょっとして小ネタを見つけたので書いてみる。


「形式を選択して貼り付け」を選択せずに行う

 メニュー「編集」→「形式を選択して貼り付け」を選ぶと、次のダイアログボックスが出て、選んでからOKで貼り付ける。

20101003-01.png

 これを、項目選択せずに貼り付けできるマクロを試してみた。

 まず、このコマンドを「マクロの記録」で記録すると、次のマクロが生成される。
' 形式を選択して貼付
sub Main
dim document as object
dim dispatcher as object
dim args1(5) as new com.sun.star.beans.PropertyValue
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService( "com.sun.star.frame.DispatchHelper" )
args1(0).Name = "Flags" '選択
args1(0).Value = "SDFN"
args1(1).Name = "FormulaCommand" '演算
args1(1).Value = 0
args1(2).Name = "SkipEmptyCells" '空白のセルを飛ばす
args1(2).Value = false
args1(3).Name = "Transpose" '行と列の入れ替え
args1(3).Value = false
args1(4).Name = "AsLink" 'リンク
args1(4).Value = false
args1(5).Name = "MoveMode" 'セルの移動
args1(5).Value = 4
dispatcher.executeDispatch( document, ".uno:InsertContents", "", 0, args1() )
end sub
 args1の各パラメーターが各項目に対応していて、代入してからコマンドを実行するという一連の動作。
 この中で、パラメーター"Flags"と"MoveMode"を使ってみるが、内容は次のようになっている。

Flags
選択
MoveMode
セルの移動
A:全て
S:テキスト
V:数
D:日付と時刻
F:数式
N:ノート
T:書式
0:下のセル
1:右のセル
2:下の行
3:右の列
4:移動しない

 特にMoveModeは、行や列を挿入して貼付という、通常ではできない指定が可能なので面白い。
 それを利用して書いたマクロがこれ。

' 書式以外を貼付
sub Paste_Exclud_Style
dim args(0) as new com.sun.star.beans.PropertyValue
args(0).Name = "Flags"
args(0).Value = "SVDFN"
createUnoService( "com.sun.star.frame.DispatchHelper" ).executeDispatch( ThisComponent.CurrentController.Frame, ".uno:InsertContents", "", 0, args() )
end sub
' セルを下に移動して貼付
sub Paste_Insert_Down
dim args(0) as new com.sun.star.beans.PropertyValue
args(0).Name = "MoveMode"
args(0).Value = 0
createUnoService( "com.sun.star.frame.DispatchHelper" ).executeDispatch( ThisComponent.CurrentController.Frame, ".uno:InsertContents", "", 0, args() )
end sub
' セルを右に移動して貼付
sub Paste_Insert_Right
dim args(0) as new com.sun.star.beans.PropertyValue
args(0).Name = "MoveMode"
args(0).Value = 1
createUnoService( "com.sun.star.frame.DispatchHelper" ).executeDispatch( ThisComponent.CurrentController.Frame, ".uno:InsertContents", "", 0, args() )
end sub

 ツールバーやキーボードショートカットに入れれば使えそうな、書式以外を貼付、セルを下や右に移動して貼付を作ってみた。3つとも構文は同じ。
 元と比べて、DIM宣言でargs()の数は必要分だけでいいので0を指定。documentとdispatcherの変数も削除して1行に集約した。

 本当は、1つのマクロでコピーしているセルの行と列どちらが多いかで、下挿入と右挿入を自動判別できるようにしたかったが、コピーしたセルの数を判別するコマンドが見当たらなくてできなかった。
 その方法さえ分かれば作れるので、また調べて改良していきたい。


(2010.10.11追記)
 先日相互リンクさせていただいた、Free Softwareでいこう!!を見ていた所、セルの挿入は、ドラッグ中に「ALT」キーを押しながらでできる事が分かった。
 そのため、自分で作っておきながら「セルを下・右に移動して貼付」のマクロは使わなくなってしまったw




posted by 司隆 at 23:44 | Comment(0) | TrackBack(0) | Computer
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]


この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。