LoginSignup
1
1

More than 5 years have passed since last update.

【LibreOffice/Basic】Calcでアクティブシートにページスタイル(ページ設定)を追加するマクロ

Posted at

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 のスタイルってどうなってるの?

じゃあ、Excelのページ設定と何が違うの?

  • Excel は、ページ設定をシートが管理。
  • Calc は、ドキュメントが管理してるページ設定をシートにリンクする感じ。

管理してる人が違うらしい。

ページ設定追加の手順は?

  1. PageStyle(ページ設定) を作成
  2. StyleFamilies(スタイル管理してる所)のPageStyles(ページスタイルグループ) に作成したPageStyle追加
  3. アクティブシートのページスタイル名を作成したものに変更
  4. ページ設定ダイアログ表示(設定もついでに)

って流れになる。

最後に

細かい説明は、思いっきり端折ってます。
後は、マクロを見てもらってGoogle先生で調べてもらえればと・・・

以下に作成時にいろいろGoogle先生で調べて参考になったページ。

以上、Jacopでした。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1