各ファイル形式で保存するときに渡すべき引数値を調べた。
成果物
概要
LibreOfficeのPythonマクロにてドキュメントを保存したい。このときstoreAsURL()
かstoreToURL()
を使う。保存形式などを指定するとき第2引数にPropertyValue
の配列を渡す。
PropertyValue
はName
とValue
の組合せである。どちらも文字列を渡すが、どんな値を渡せば何が設定できるのか。その一覧はどこにあるのか不明。なので調べた。
ネットで調べるとCSVに出力するとき渡す引数は以下。マジックナンバーだらけ。
from com.sun.star.beans import PropertyValue properties = (PropertyValue(Name='FilterName', Value='Text - txt - csv (StarCalc)'), PropertyValue(Name='FilterOptions', Value='44,34,76,,,,,,true')) doc.storeAsURL(url, properties)
storeAsURLの第2引数PropertyValueのName属性値一覧
Name 属性値 |
Value の型 |
概要 |
---|---|---|
CharacterSet |
String | 文字セットを指定する |
FilterName |
String | 保存形式を示すフィルタ名を指定する |
FilterOptions |
String | フィルタ用の追加オプションを定義する |
Overwrite |
Boolean | 既存ファイルを警告なしで上書きする |
Password |
String | 保護されたファイルのパスワードを転送する |
Unpacked |
Boolean | ドキュメントを圧縮せずサブディレクトリに保存する |
FilterName
指定できる値は前回、一覧を出力した。
拡張子 | FilterName 値 |
---|---|
ods |
calc8 |
fods |
OpenDocument Spreadsheet Flat XML |
csv ,tsv ,tab ,txt |
Text - txt - csv (StarCalc) |
slk ,sylk |
SYLK |
FilterOptions
カンマ区切りの文字列で渡す。各列の意味は以下。
Index | 概要 | 値の例 | 初期値 | 補足 |
---|---|---|---|---|
1 | フィールドセパレータ | 44 |
? | 44 はASCIIコードを10進数で表したときの, である |
2 | テキストデリミタ | 34 |
? | 34 はASCIIコードを10進数で表したときの" である |
3 | 文字セット | 76 |
? | 76 はUTF-8を示す仕様である |
4 | 先頭行 | 1 |
? | 1 行目を先頭行とする |
5 | 各列のセル書式 | ? | ColmunIndex/FormatCode |
ColmunIndex は1 から始まる整数で指定する。FormatCode は1 =標準, 2 =テキスト、3 =MM/DD/YY , 4 =DD/MM/YY , 5 =YY/MM/DD , 9=無視(インポートしない), 10=米国英語 |
6 | 言語識別子 | ? | 10進数で表現した文字列として渡す。Microsoftの言語識別子に基づく。詳細は言語識別子の定数と文字を参照。 | |
7 | csvインポート | true /false |
false |
「テキストとして引用されたフィールド」チェックボックス相当 |
7 | csvエクスポート | true /false |
false |
「すべてのテキストセルを引用する」チェックボックス相当 |
8 | csvインポート | true /false |
false |
「特別な番号を検出する」チェックボックス相当。 |
8 | csvエクスポート | true /false |
true |
同等のUIなし。true なら数値セルは数値として格納される。false なら数値はテキスト区切文字付きテキストとして保存される。 |
9 | csvインポート | ? | ? | 未使用:8つのトークンのみが使用される |
9 | csvエクスポート | true /false |
true |
「セルの内容を表示どおりに保存する」チェックボックス相当 |
結論
storeAsURL
, storeToURL
するときの第2引数PropertyValue
で何を渡すべきか。保存形式ごとにまとめてみた。
ODS
properties = ()
ods
はLibreOffice Calcにおけるデフォルトのファイル形式である。空の配列を渡せばよい。
または以下でも可。
properties = ( PropertyValue( Name='FilterName', Value='calc8'))
CSV
properties = ( PropertyValue( Name='FilterName', Value='Text - txt - csv (StarCalc)'), PropertyValue( Name='FilterOptions', Value='44,34,76,,,,,,true'))
FilterOptions
のValue
TSV
properties = ( PropertyValue( Name='FilterName', Value='Text - txt - csv (StarCalc)'), PropertyValue( Name='FilterOptions', Value='9,34,76,,,,,,true'))
CSVとほぼ同等。ただしフィールドセパレータを<TAB>
を意味するASCIIコード9
に変更してある。
FODS
properties = ( PropertyValue( Name='FilterName', Value='OpenDocument Spreadsheet Flat XML'))
fods
はods
のXML版ファイル形式である。ファイルサイズは大幅に肥大化するが、バイナリでなくテキストで表現できる。
SYLK
properties = ( PropertyValue( Name='FilterName', Value='SYLK'))
SYLK
はMicrosoft社が開発した書式。テキスト形式でセルの書式などを簡易表現できる。XMLよりも簡易であるため軽量。だが現在、Microsoft社から情報が削除されてしまい仕様が不明に……。
ググると有志の方が仕様を復元してくれていたのを発見。感謝。
昔からMicrosoftはすぐ資料やコードを使えなくする害悪。カネ儲け狙いなのはわかるが、そのせいでユーザは学習コストをムダにさせられて多大なる損失を被る。なので私はMicrosoft製品を捨ててLinuxやオープンソースを使うことで幸せになった。
情報源
- https://wiki.openoffice.org/wiki/JA/Documentation/BASIC_Guide/StarDesktop
- https://wiki.openoffice.org/wiki/Documentation/DevGuide/Spreadsheets/Filter_Options
所感
仕様を調べるのが大変すぎた。
対象環境
- Raspbierry pi 4 Model B
- Raspbian buster 10.0 2019-09-26 ※
- bash 5.0.3(1)-release 学習まとめ
- LibreOffice 6.1.5.2 ※
$ uname -a Linux raspberrypi 4.19.97-v7l+ #1294 SMP Thu Jan 30 13:21:14 GMT 2020 armv7l GNU/Linux