よろずやネット

最近はLibreofficeにハマっています。

用紙サイズとマージン(余白)の設定

前回までは、Calc(カルク)のセルの操作までやってきた。
今回は、用紙サイズとマージン(余白)の設定だ。

Calc(カルク)のマクロ自動記録で「ページの設定」を記録すると、

dim document as object
dim dispatcher as object

document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService( "com.sun.star.frame.DispatchHelper" )

dispatcher.executeDispatch(document, ".uno:PageFormatDialog", "", 0, Array())

となって、ダイアログのウインドウを表示するマクロしか記録されない。
しかしもー、オープンオフィスの自動マクロ記録は、なんでいつもDispatchHelperが出てくるんだ!?
DispatchHelperを使用したマクロだと、知りたいと思うことが何もわからない。

エクセルの自動マクロ記録を使用すると、ちゃんとメソッドとかプロパティが出てきて、ヒントをたくさん得られるのに、オープンオフィスの自動マクロ記録は、あまりにも不親切ではないか。
それとも、オープンオフィスは「シロウトがマクロを書く」ということをあまり想定していないのだろか。
オフィスとの互換性があるというものの、「ユーザーが自分でマクロを書く」という事に関しては、マイクロソフトオフィスに軍配が上がる。断言!



ますは、http://api.openoffice.org/
のサイト内検索で、page size というキーワードを入力。

Andrew Douglas PitonyakさんのRe: [api-dev] Page size and Page format というメールメッセージを発見。
これを開いてみると、メールの下部に、http://www.pitonyak.org/AndrewMacro.sxw
というマクロに関するドキュメントのURLが書かれている。
いいぞ!
早速ダウンロードしてみる。

このドキュメントは英語で、タイトルは、
Useful Macro Information For OpenOffice By Andrew Pitonyak
(アンドリュー・ピトニャックさんの有用なオープンオフィスマクロ情報)<--勝手な意訳

これは、522ページにも及ぶオープンオフィスマクロの解説書だ。(残念ながらVB.NETとの絡みはない)
いい感じ!今後、私のバイブルになりそうなドキュメントである。アンドリューさん、ありがとう。私の師匠!
(しかし、英語だから読むのには、また、集中力の全員召集をせねばならぬ)

このドキュメントの52ページに、ペーパーマージンの項目を発見!

流れとしては、ページスタイルを取得し、その中のプロパティを設定するという感じだ。

もっと知るために、http://api.openoffice.org/
のサイト内検索で、PageStyles というキーワードを入力。

検索結果のリンクをたどっていくと、あったあった、あったぞ。
http://api.openoffice.org/docs/common/ref/com/sun/star/style/PageProperties.html

ページスタイルの中のページプロパティには、ものすごい数のプロパティが存在するではないか!
ペーパーサイズや余白のプロパティはごく一部分なのだ。
早速、VB.NET風に書き換えてみる。

Dim oStyleFamilies As Object
Dim oPageStyles As Object
Dim oPageStyle As Object

oStyleFamilies = oCalcDoc.getStyleFamilies()
oPageStyles = oStyleFamilies.getByName( "PageStyles" )
oPageStyle = oPageStyles.getByName( "Default" )

With oPageStyle
    .Width=21000  '用紙幅210mm つまりA4
    .Height=29700  '用紙高(長)297mm つまりA4
    .LeftMargin=2000  '左側の余白20mm
    .RightMargin=2000  '右側の余白20mm
    .TopMargin=2000   '上の余白20mm
    .BottomMargin=2000  '下の余白20mm
End With

ランしてみる。エラーなし、結果OK!
ちなみに、APIサイトによると、上記設定値はLong型の整数である。

前述したが、ページプロパティはものすごい数があるので、一つ一つ試していたら、膨大な時間がかかりそうである。
シロウトの私としては、上記6つのプロパティで、とりあえず満足なので、次のステップに進むのだ。