【LibreOffice】CSV を開く時に毎回出てくるインポート画面を出さない方法【CSV の読み込み形式を指定して開く】

決算分析システム

『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印字可能文字

(Wikipedia 英語) 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 SetIndex
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-8Shift-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)』のほうが、簡単でいいなと思いました。

レジストリを使った方法は、ひとまずお蔵入りです。

スポンサーリンク
シェアする(押すとSNS投稿用の『編集ページ』に移動します)
フォローする(RSSフィードに移動します)
スポンサーリンク
シラベルノート
タイトルとURLをコピーしました