ファイルの保存時にチェック処理を自動で行いたい。

私の業務関係者(多数)にLibreOfficeを導入してもらう予定です。
しかし、業務の都合上、どうしてもMS Officeの利用者とのファイル授受が不可欠なので、
ファイルを保存する際には、xls、xlsx を利用します。

業務上、シェイプ図形とチェックボックスをよく利用するのですが、

  • CALCで、シェイプ図形を回転して xls形式で保存すると、次回、ファイルを開いたときに図形の形状や位置が変わってしまう。
  • CALCで、フォームコントロールのチェックボックスを xlsx形式で保存すると、次回、ファイルを開いたときにチェックボックスが消えてしまう。

などの不具合がCALCにあるため、困っています。

Bugzillaには、既にTicketが登録されていましたし、私からも追加のBug報告を行いました。
他にも多数の案件のTicketが登録されていましたので、対応には時間がかかるだろうと思います。

そこで、代替策として、以下のような機能を実現したいのですが、
マクロか、LibreOfficeソフトウェア開発キットなどで、実現可能でしょうか?
他にも何か良い回避策があれば教えてほしいです。

【目的】

xls、xlsxでファイル保存した時と、取引先(EXCEL)にファイルを渡した時とで、
状態が異なると混乱するため、予め文書作成者に気付きを与えたい。
説明文の周知とかを行っても全員に行き渡らないし、個人のミス・失念は避けられないため、
プログラムで対応したい。

###【案】
ファイル保存した時に、必ず呼ばれるマクロを作成する。
「シェイプ図形を回転している文書をxls形式で保存しようとしたら、メッセージを出す。」
などのチェック処理をコーディングする。
作成したマクロをファイルとして保存し、LibreOfficeを導入する全関係者の
全端末にマクロファイルを配置する。
当該端末を誰がログインした場合であっても、LibreOfficeを利用するとマクロが有効になり
新規作成した文書を保存する場合や、CALCで読込んだファイルを名前を付けて形式を変更して保存
する場合い、上書き保存する場合などの保存に関する全処理において、
「xlsでシェイプ図形を回転している場合にはメッセージ・」
などのチェック処理を実行できるようにする。

マクロの方はわからないので他の人に任せますが、マクロの実行はイベントに割り当てることができます。

ツールマクロマクロの管理からマクロの管理ダイアログを開いてマクロを選びます。割り当てボタンを押してイベントタブから割り当てたいイベントに設定できます。

未検証:

https://opengrok.libreoffice.org/xref/core/filter/source/config/fragments/filters/calc_MS_Excel_2007_XML.xcu?r=77ae0abe#20

  • こういうのの、UIComponentに指定できるものはなにか?

  • ビルド時にmakefileが各種フィルタのXMLを設定ファイル一つとしてまとめてしまっているから、ビルド済みのLibreOfficeに(もしかしたら付属している)各ファイルを後からいじっても無駄、とかあるかも。

質問者です。

nogajunさん、himajin100000さん、アドバイスありがとうございます。

マクロを保存すると、
C:\Users(ユーザ名)\AppData\Roaming\LibreOffice\4\user\basic\Standard
以下に出来るのですね。

マクロを作成して、「文書を保存した時」のイベントに割り当てる方法もわかりました。

マクロへのイベントの割り当て情報は、
C:\Users(ユーザ名)\AppData\Roaming\LibreOffice\4\user\registrymodification.xcu
に書き込まれるのですね。

マクロのファイルを他の端末にコピーして、xcuに追加された行を他の端末の同ファイルに追記したところ、
保存時するときにマクロを走らせることができました。

ドメインへのログイン時に、上記ファイルへの定義を追加するscriptを走らせるというようにして、
関係する全ユーザへのマクロの割り当てを実現しようと思います。

himajin100000さんのアドバイスで
https://opengrok.libreoffice.org/xref/core/filter/source/config/fragments/filters/calc_MS_Excel_2007_XML.xcu?r=77ae0abe#20
にリンクが張られている理由がわかりません。

このファイルは何なのでしょうか?どのような利用を想定してご紹介くださったのでしょうか?

「ビルド時にmaikfile・・・各ファイルを後からいじっても無駄、とかあるかも。」
というようなご説明がありましたが、
registrymodification.xcu
に追記したら、保存時のイベントをハンドリングできたので、無駄ではないみたいです。

遅くなって申し訳ありません。

このファイルは何なのでしょうか?どのような利用を想定してご紹介くださったのでしょうか?

一例ですが、例えば、drawのファイルをpngにエクスポートするフィルタにはUIComponentとして

https://opengrok.libreoffice.org/xref/core/filter/source/config/fragments/filters/draw_png_Export.xcu?r=2b383d19#20

com.sun.star.svtools.SvFilterOptionsDialog

が指定されています。こんな感じで当該クラスを実装し

https://opengrok.libreoffice.org/xref/core/svtools/source/filter/SvFilterOptionsDialog.cxx?r=10d29c39#1

こんな風に登録すると、

https://opengrok.libreoffice.org/xref/core/svtools/util/svt.component?r=837f6e6f#34

ファイル名を指定して保存ダイアログを肯定応答で閉じた後、

こんな風に呼び出されます

https://opengrok.libreoffice.org/xref/core/sfx2/source/doc/guisaveas.cxx?r=a0656ec6#1608

https://opengrok.libreoffice.org/xref/core/svtools/source/filter/SvFilterOptionsDialog.cxx?r=10d29c39#186

https://opengrok.libreoffice.org/xref/core/svtools/source/filter/SvFilterOptionsDialog.cxx?r=10d29c39#227

実際にdrawを起動し、pngにエクスポートしてみると、解像度や寸法を指定できるダイアログが登場します。

同じことがExcelファイルにも言えると思うので、それらを実装してみては?というややハードな提案です。

ビルド時にmaikfile・・・各ファイルを後からいじっても無駄、とかあるかも。」 というようなご説明がありましたが、 registrymodification.xcu に追記したら、保存時のイベントをハンドリングできたので、無駄ではないみたいです。

ある程度じっくり調べたかったのですが、時間やら余裕やらがなかったため、回答の手抜きです。

この辺のUIComponentの設定がビルド後に設定できるか、また、LibreOfficeがプロファイルを新規作成する際の初期設定がLibreOfficeのインストールディレクトリのshare\registry\に格納されているのですが、これらが分割されているのと同様に設定の方法を考える必要があるかも、と検証できず自信がない状態で予防線を張った結果です。杞憂でした。申し訳ありません

まぁ「SvFilterOptionsDialogと同じようなものを自力実装」とかが出来るレベルならそもそも自力で調べられるだろう、との読みもありました。