storeAsURLの第2引数は?(CSV,TSV,FODS,SYLK)
各ファイル形式で保存するときに渡すべき引数値を調べた。
成果物
概要
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