『CSV の読み込み形式を指定して開く方法』です。
LibreOffice Calc で CSV を開くと、毎回、『テキストのインポート』という画面が出てきました。
CSV をダブルクリックして開くたびに、"UTF-8"
とか "SHIFT-JIS"
を設定するのが、とても大変でした。
『デフォルトの読み込み形式を指定して、設定画面を出さずに開きたい。』
OS は Windows 10 です。
自分の解決策ですが、
--infilter="CSV:(フィールド区切り文字),(テキスト区切り文字),(文字エンコーディング),(始めの行)"
というオプションを追加した『ショートカット』を作成しました。
このショートカットを、右クリックメニューの『送る (SendTo)』に追加することで、CSV の読み込み形式を指定しました。
その結果、ダイアログを出さずに開けるようになりました。
この方法を紹介します。
参考サイト
(Stack Exchange) libreoffice – How to avoid Text Import form when opening CSV in Calc?
(Bugzilla) 36313 – CLI: Encoding issue when Converting documents: esp. UTF-8 in headless mode(コマンドラインから --infilter
オプションが使えるようになったときの議論)
(Apache OpenOffice Wiki) Filter Options(--infilter
オプションに使える数値など)
アスキーコード表
(Wikipedia 日本語) ASCII – ASCII制御文字
(Wikipedia 日本語) ASCII – ASCII印字可能文字
ショートカットの作り方
自分は、『スタートメニュー (Start Menu)』のフォルダにあったショートカットを、デスクトップにコピーして作りました。
コピーしたのは、『LibreOffice Calc』のショートカットです。
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\LibreOffice 6.4
--infilter オプションの説明
--infilter
オプションの中の数値の意味は、Filter Options for the CSV Filter (Apache OpenOffice Wiki) に載っていました。
--infilter="CSV:(フィールド区切り文字),(テキスト区切り文字),(文字エンコーディング),(始めの行),(列の種類)"
『フィールド区切り文字 (Field Separator)』は、ASCII コードの数値で指定するとのことでした。
- カンマ
,
なら、10 進数の 44 を指定します。 - タブ文字
\t
なら、10 進数の 9 を指定します。
『テキスト区切り文字 (Text Delimiter)』も、ASCII コードの数値で指定するとのことでした。
- ダブルコーテーション
"
なら、10 進数の 34 を指定します。 - シングルコーテーション
'
なら、10 進数の 39 を指定します。
『文字エンコーディング (Character Set)』は、Filter Options for Lotus, dBase and DIF Filters (Apache OpenOffice Wiki) の表から探して使用します。
自分は、以下の文字コードを良く使っています。
Character Set | Index |
---|---|
Unicode (UTF-8) | 76 |
EUC-JP (Japanese) | 69 |
Shift-JIS (Japanese) | 64 |
Windows-932 (Japanese) | 60 |
『始めの行 (Number of First Line)』は、1 を使います。
2 を指定したら、2 行目から読み込まれて、1 行目が無くなりました。
自分は、すべての行を読み込みたかったので、1 を使いました。
『列の種類 (Cell Format Codes)』は、省略しました。
書式はおまかせコースです。
書式を指定することもできました。
必ず『文字列』として読み込んでほしい列とか、必ず『日付』として認識してほしい列があったときは、Filter Options for the CSV Filter (Apache OpenOffice Wiki) の表を見て、Token の例の通りに指定したらできました。
書式の指定方法は、『列番号 (Column)』と『書式コード (Format Code)』を、スラッシュで区切りながら、交互に並べていく感じでした。
実験データの CSV とか、書式の決まった CSV をたくさん見ていくときに便利でした。
コマンドライン文字列の例
ショートカットの『リンク先(T):』に設定したコマンドライン文字列の例です。
カンマ + ダブルコーテーション + UTF-8
フィールド区切りが『カンマ ,
(44, 0x2C)』で、テキスト区切りが『ダブルコーテーション "
(34, 0x22)』で、エンコーディングが『UTF-8
(76)』の CSV を開く場合です。始めの行は 1 です。
リンク先(T):
"C:\Program Files\LibreOffice\program\scalc.exe" --infilter="CSV:44,34,76,1"
カンマ + ダブルコーテーション + Shift-JIS
フィールド区切りが『カンマ ,
(44, 0x2C)』で、テキスト区切りが『ダブルコーテーション "
(34, 0x22)』で、エンコーディングが『Shift-JIS
(64)』の CSV を開く場合です。始めの行は 1 です。
リンク先(T):
"C:\Program Files\LibreOffice\program\scalc.exe" --infilter="CSV:44,34,64,1"
タブ + ダブルコーテーション + UTF-8
フィールド区切りが『タブ \t
(9, 0x09)』で、テキスト区切りが『ダブルコーテーション "
(34, 0x22)』で、エンコーディングが『UTF-8
(76)』の CSV を開く場合です。始めの行は 1 です。
リンク先(T):
"C:\Program Files\LibreOffice\program\scalc.exe" --infilter="CSV:9,34,76,1"
ショートカットを SendTo フォルダに置く
最後に、作成したショートカットを、以下のフォルダに置きました。
C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\SendTo
※
%USERNAME%
を含んだ文字列は、そのままコピーして使うことができます。『エクスプローラーのアドレスバー』や『ファイル名を指定して実行』に貼り付けて実行したら、現在のユーザー名に変換されて、SendTo のフォルダが開きました。
これで、右クリックメニューの『送る(N)』の中に、CSV を開くための項目ができました。
CSV が、『テキストのインポート』ダイアログ無しで開けるようになって、とても快適です。
『テキストのインポート』も便利でしたが、毎回項目を選ぶのが大変だったんですよね。
特に、エンコーディングのリストは数が多かったですからね。
深くスクロールしないと Shift-JIS
が選択できなくて、とても不便でした。
UTF-8
と Shift-JIS
との往復が、本当に大変でした。
解決策が見つかって良かったです。
ダブルクリックで開いたときのダイアログは消せないのか?
ダブルクリックで開いたときのダイアログも、一応消すことができました。
ですが、CSV 以外のファイルにまで --infilter
のオプションがくっついてしまう問題があったので、結局使わなくなりました。
一応ですが、目的は果たせたので、自分が試したやり方を紹介します。
レジストリエディタを起動します。
Windows のエクスプローラーが『.csv
』を開くときのキーを確認します。
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.csv\OpenWithProgIDs
すると、『soffice.StarCalcDocument.6
』という名前がありました。
なので、同じ名前の付いた、以下のキーがあるはず。
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\soffice.StarCalcDocument.6
これが、CSV を開くときに使われる、LibreOffice のレジストリの場所でした。
この中に、LibreOffice を起動するときのコマンドライン文字列がありました。
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\soffice.StarCalcDocument.6\shell\open\command
(既定) REG_SZ "C:\Program Files\LibreOffice\program\soffice.exe" -o "%1"
この文字列に --infilter
オプションを追加したら、送るメニューの時と同様に、『テキストのインポート』ダイアログを出さずに CSV が開くようになりました。
たとえば、以下のように追加しました。
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\soffice.StarCalcDocument.6\shell\open\command
(既定) REG_SZ "C:\Program Files\LibreOffice\program\soffice.exe" -o "%1" --infilter="CSV:44,34,76,1"
設定の切り替えは、これらのキーをエクスポートしておくことで実現しました。
自分は、ダイアログを出したくない時だけ、一時的にレジストリを書き換えて、用が済んだら元に戻す、といったことをしていました。
ですが、問題がありました。
ProgID の名前『soffice.StarCalcDocument.6
』が、『.csv
』以外の拡張子でも使われていたんですね。
これでは、『.csv
』以外のファイルを開くときにも、--infilter
オプションがついてしまいます。
結局、右クリックの『送る(N)』のほうが、簡単でいいなと思いました。
レジストリを使った方法は、ひとまずお蔵入りです。