Jacop です。
Calcでアクティブシートにページスタイル(ページ設定)を追加するマクロをBasicで作ってみました。
はじめに
Office から LibreOffice に乗り換えて、Calc使ってると
ページ設定ってシート毎に出来ないの?
って思ったことってありませんか?、自分はあります。
ということで、まずは、マクロを使わずできる方法を Google先生で調査。
(1) 一度 Excel形式で保存して、Calcで読み込む
一瞬でシートごとにスタイルを設定する | OpenOffice.org導入支援
ここで説明されてる方法が、一番手っ取り早い。
要は、CalcでExcel形式に保存すると Excelに合わせるためにページ設定を追加する動作を利用した方法。
注意点は、副作用(CalcとExcelとの差)が出る可能性がある
例えば、オートシェイプの位置がずれる等々・・・
(2) 手動で個別に、ページ設定を追加していく
JA福岡 LibreOffice Writer & Calc よく利用する機能マニュアル
このPDFの6ページ目に載ってる方法が、LibreOffice的には王道。
要は、使う分のページ設定を1つ1つ手動で追加していく方法。
この方法だと、副作用は出ないはず。
注意点は、シートの数が増えて、いろいろなページ設定したい、という場合、かなり面倒くさい。
もう少し使いやすくするため、マクロ化に踏み切った
で、出来上がったのが以下のマクロ(Basic)。
'=============================================================================
' 新しいページスタイルを作成してアクティブシートに設定する
'=============================================================================
Sub makeNewPageStyle2ActiveSheet
Dim oNewStyle As Object '新しいページスタイル object
Dim sNewStyleName As String '新しいページスタイル名
Dim oStyleFamilies As Object 'ドキュメントのスタイルたち object
Dim oActiveSheet As Object 'アクティブシート object
'ページ設定ダイアログ表示用
Dim oFrame As Object 'ドキュメントのフレーム object
Dim oDispatcher As Object 'com.sun.star.frame.DispatchHelper
oStyleFamilies = ThisComponent.StyleFamilies
oActiveSheet = ThisComponent.CurrentController.getActiveSheet()
'-- 新しい PageStyle の名前 "PageStyle_アクティブシート名"
sNewStyleName = "PageStyle_" & oActiveSheet.Name
'-- 新しい PageStyle object を作成
oNewStyle = ThisComponent.createInstance("com.sun.star.style.PageStyle")
'-- 新しい PageStyle を StyleFamilies に追加する
' PageStyle を現在のドキュメントのStyleFamiliesに追加しただけ
oStyleFamilies.getByName("PageStyles").insertByName(sNewStyleName, oNewStyle)
'-- 新しい PageStyle の設定を変更
' 試しにA3用紙にしてみる
' 設定できる内容は以下参照
' com.sun.star.style.PageProperties 汎用設定
' com.sun.star.sheet.TablePageStyle Calc固有設定
' ※注意 StyleFamiliesに追加してからでないと設定変更効かなかった
oNewStyle.setPropertyValue("IsLandscape", True) '横向き
oNewStyle.setPropertyValue("Width", 42000) '紙の横の長さ A3
oNewStyle.setPropertyValue("Height", 29700) '紙の縦の長さ A3
'-- アクティブシートの PageStyle を作成した PageStyle に変更
oActiveSheet.PageStyle = sNewStyleName
' oActiveSheet.setPropertyValue("PageStyle", sNewStyleName) 'これと同じ
'-- ページ設定ダイアログ表示
' !!注意!!
' Basic IDE で Run するとexecuteDispatchでクラッシュする
' 必ず、Calcから ツール>マクロ>マクロの実行... から実行すること
oFrame = ThisComponent.CurrentController.Frame
oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
oDispatcher.executeDispatch(oFrame, ".uno:PageFormatDialog", "", 0, Array())
End Sub
マクロの説明
ここからはかなり適当に書いてるのでツッコミはなしで。
まず、LibreOffice(OpenOffice) Calc のスタイルってどうなってるの?
- セルスタイルとページスタイルの2つがある
- ドキュメント単位でスタイル管理
- デフォルトスタイルはアプリケーションレベルで保持
- 比較的わかりやすく書いてあるのは、ここ
表計算ドキュメントの書式設定 - Apache OpenOffice Wiki - 詳しすぎて理解不能になるほど書いてあるのは、
ここの 8.4 スプレッドシート 全体的なドキュメント特徴
デベロッパーのガイド - OpenOffice
※ ちなみに、以下から丸ごとダウンロードできるので落としておくと色々捗る。
Developers Guide
じゃあ、Excelのページ設定と何が違うの?
- Excel は、ページ設定をシートが管理。
- Calc は、ドキュメントが管理してるページ設定をシートにリンクする感じ。
管理してる人が違うらしい。
ページ設定追加の手順は?
- PageStyle(ページ設定) を作成
- StyleFamilies(スタイル管理してる所)のPageStyles(ページスタイルグループ) に作成したPageStyle追加
- アクティブシートのページスタイル名を作成したものに変更
- ページ設定ダイアログ表示(設定もついでに)
って流れになる。
最後に
細かい説明は、思いっきり端折ってます。
後は、マクロを見てもらってGoogle先生で調べてもらえればと・・・
以下に作成時にいろいろGoogle先生で調べて参考になったページ。
- Writer でのスタイル追加が参考になりました
LibreOffice - Writerを起動し、2枚目のページスタイルを横にする方法 - ページ設定内容
LibreOffice: PageProperties Service Reference - ここのMacroの杜はサンプル数が豊富でかなりありがたい
OSS( Open Source Software )でいこう!!「 OpenOffice.org / LibreOfficeを使おう編 」
以上、Jacopでした。