Calc(45)ファイル保存ダイアログとオプション

2017-11-17

旧ブログ

t f B! P L
ODS、CSV、PDF形式でCalcドキュメントを保存するときのファイル保存ダイアログのオプションのチェックボックスの働きを調べます。Windows10で調べています。Linux版では「ファイル名に拡張子を付ける」チェックボックスが表示されません。

前の関連記事:Calc(44)ファイルフィルターのオプションダイアログ


メニューから開くファイル保存ダイアログ


ODS形式で保存するときのダイアログのオプション


これはCalcドキュメントのデフォルト形式なので、ファイル→保存、か、名前をつけて保存、で保存できます。

LibreOffice5(92)全ディスパッチコマンドのラベルの取得で調べた表をもとにするとディスパッチコマンドでは.uno:Saveか.uno:SaveAsになります。

これででてくるファイル保存ダイアログはLibreOffice5(77)FilePickerのTemplateDescriptionを実行してみるのFILESAVE_AUTOEXTENSION_PASSWORD_FILTEROPTIONSになります。

「フィルター設定を編集する」チェックボックスはグレイアウトして変更できません。

「ファイル名に拡張子を付ける」チェックボックスは「ファイルの種類」を変更したときに拡張子を変更するかどうかに反映されます。

「ファイル名に拡張子を付ける」にチェックを付けていると「ファイルの種類」を変更すると拡張子が変更されます。

「ファイル名に拡張子を付ける」のチェックを外すと「ファイルの種類」を変更しても拡張子は元のファイルの種類のままのものになります。

ということでこのチェックボックスは正確には「ファイル名に拡張子を付ける」のではなく、「ファイル名の拡張子を変更する」ですね。

ファイルの種類は「ODF表計算ドキュメント(.ods)(*.ods)」というように拡張子が繰り返し表示されてしまっています。

この拡張子重複表示はWindows版すべてのファイル形式で同じです。


「パスワード付きで保存する」にチェックを付けるとパスワードを設定するダイアログをが出現してODFファイルにパスワードを設定できます。

このダイアログをマクロから利用する方法はわかりませんでした。

CSV形式で保存するときのダイアログのオプション


CSV形式で保存するにはODS形式のときと同様にファイル→保存、か、名前をつけて保存、でファイル保存ダイアログを表示させて、「ファイルの種類」を「テキストCSV(.csv)(*.csv)」を選択します。

「ファイル名に拡張子を付ける」にチェックを入れていると「ファイル名」の拡張子がodsからcsvに変更されます。

CSV形式ではパスワードは設定できないので「パスワード付きで保存する」チェックボックスは変更できません。


「フィルター設定を編集する」チェックボックスにチェックして「保存」ボタンをクリックするとCalc(44)ファイルフィルターのオプションダイアログでみたCSVのオプションダイアログが表示されます。

「キャンセル」ボタンをクリックするとファイルの保存自体がキャンセルされます。

PDF形式で保存するときのダイアログのオプション

PDF形式で保存するにはファイル→エクスポート、でファイルの種類をPDFにするか、ファイル→PDFとしてエクスポート、にします。

これらはディスパッチコマンドでは.uno:ExportToと.uno:ExportToPDFに該当します。

PDFとしてエクスポート、ではCalc(44)ファイルフィルターのオプションダイアログのPDFオプションダイアログがまず表示され、そのダイアログで「エクスポート」すると、「ファイル名に拡張子を付ける」チェックボックスだけのFILESAVE_AUTOEXTENSIONのファイル保存ダイアログが表示されます。

「ファイルの種類」はPDFしか選択できないので、このダイアログでのチェックボックスは意味がありません。


ファイル→エクスポート、では「選択範囲」チェックボックスが付いたFILESAVE_AUTOEXTENSION_SELECTIONが表示されます。

しかしこの「選択範囲」チェックボックスはチェックを付けても何が変わるのかわかりませんでした。


データの入った複数のシートが存在する場合、PDFオプションダイアログで「Selection/Selection sheet(s)」を選択すると、アクティブシートだけPDFファイルになりました。

「すべて」を選択するとすべてのシートがページとしてPDFファイルに出力されました。

選択したセルのみ出力するという機能はないようです。

FilePickerのサービスとインターフェイス一覧


マクロでファイル保存ダイアログを使ってみるとWindowsでの「ファイル名に拡張子を付ける」チェックボックスだけは最初から実装してありましたが、それ以外のチェックボックスは自分で実装しないといけないようです。

ファイル保存ダイアログのチェックボックスはXFilePickerControlAccessインターフェイスのメソッドで操作します。

FilePickerサービスは毎回使う直前にインスタンス化しないといけないと、ちゃんと動かないときがあります。

またオートメーションで実行するとLibreOfficeがクラッシュします。
def macro():
 ctx = XSCRIPTCONTEXT.getComponentContext()  # コンポーネントコンテクストの取得。
 smgr = ctx.getServiceManager()  # サービスマネージャーの取得。 
 tcu = smgr.createInstanceWithContext("pq.Tcu", ctx)  # サービス名か実装名でインスタンス化。
 filepicker = smgr.createInstanceWithContext("com.sun.star.ui.dialogs.FilePicker", ctx)
 tcu.wtree(filepicker)

├─.lang.XInitialization
│     void  initialize( [in] [any] aArguments
│            ) raises ( .uno.Exception)
├─.ui.dialogs.XFilePicker3
│   ├─.lang.XComponent
│   │     void  addEventListener( [in] .lang.XEventListener xListener)
│   │     void  dispose()
│   │     void  removeEventListener( [in] .lang.XEventListener aListener)
│   ├─.ui.dialogs.XFilePicker2
│   │   │   [string]  getSelectedFiles()
│   │   └─.ui.dialogs.XFilePicker
│   │     │     string  getDisplayDirectory()
│   │     │   [string]  getFiles()
│   │     │       void  setDefaultName( [in] string aName)
│   │     │       void  setDisplayDirectory( [in] string aDirectory
│   │     │                       ) raises ( .lang.IllegalArgumentException)
│   │     │       void  setMultiSelectionMode( [in] boolean bMode)
│   │     └─.ui.dialogs.XExecutableDialog
│   │           short  execute()
│   │            void  setTitle( [in] string aTitle)
│   ├─.ui.dialogs.XFilePickerNotifier
│   │     void  addFilePickerListener( [in] .ui.dialogs.XFilePickerListener xListener)
│   │     void  removeFilePickerListener( [in] .ui.dialogs.XFilePickerListener xListener)
│   ├─.ui.dialogs.XFilePreview
│   │            long  getAvailableHeight()
│   │            long  getAvailableWidth()
│   │         boolean  getShowState()
│   │         [short]  getSupportedImageFormats()
│   │     .util.Color  getTargetColorDepth()
│   │            void  setImage( [in] short aImageFormat,
│   │                            [in]   any aImage
│   │                 ) raises ( .lang.IllegalArgumentException)
│   │         boolean  setShowState( [in] boolean bShowState)
│   ├─.ui.dialogs.XFilterGroupManager
│   │     void  appendFilterGroup( [in]              string sGroupTitle,
│   │                              [in] [.beans.StringPair] aFilters
│   │                   ) raises ( .lang.IllegalArgumentException)
│   ├─.ui.dialogs.XFilterManager
│   │       void  appendFilter( [in] string aTitle,
│   │                           [in] string aFilter
│   │                ) raises ( .lang.IllegalArgumentException)
│   │     string  getCurrentFilter()
│   │       void  setCurrentFilter( [in] string aTitle
│   │                    ) raises ( .lang.IllegalArgumentException)
│   └─.util.XCancellable
│        void  cancel()
└─.ui.dialogs.XFilePickerControlAccess
       void  enableControl( [in]   short ControlId,
                            [in] boolean bEnable)
     string  getLabel( [in] short aControlId)
        any  getValue( [in] short aControlId,
                       [in] short aControlAction)
       void  setLabel( [in]  short aControlId,
                       [in] string aLabel)
       void  setValue( [in] short ControlId,
                       [in] short aControlAction,
                       [in]   any aValue)

次の関連記事:Calc(46)シートをファイルに切り出すマクロ

ブログ検索 by Blogger

Translate

最近のコメント

Created by Calendar Gadget

QooQ