(2024-04-30 初稿 -2024-05-01 追記)
作成する中で、LibreOfficeにコマンドラインでCSVファイルをエクセルファイル(xlsx)に変換する機能があることを見つけた。
最初は、CSVファイルを右クリックして、LibreOfficeまたはExcelで読み込めば、ダイアログが出て普通に読み込めるから不要かな…と思ったのだが、以下の2つの理由から変換のスクリプトを作成することにした。
- CSVファイルが多数ある場合等に変換を自動化したい
- LibreOfficeの変換のオプションが多数あり、覚えられない
ちなみに、筆者はDebian 12(bookworm)の環境で、以下のとおり。
#!/usr/bin/env bash # convert csv-file to xlsx file # ver0.01 [2024-04-30] start /usr/bin/libreoffice --headless --convert-to xlsx --infilter=xlsx:44,34,76 "$1"
特にわかりにくいのは、--infilterのオプションで、上記の2番めのリンクに詳細が記載されているが、ここでも主な物をメモとして残す。
44: カンマ区切り
34: ダブルクォート
その他文字コード 60: Windows-932 64: Shift-JIS 72: ISO-2022-JP
例えば、上記スクリプトをcsv2xlsxと命名し、実行権を与え。以下のように実行する。
$ chmod +x csv2xlsx $ csv2xlsx csv-file
(2024-05-01追記)
書き忘れたが、上記コマンド実行して、以下のワーニングが出るときには、パッケージを追加でインストール。
Warning: failed to launch javaldx - java may not function correctly
$ apt install default-jre libreoffice-java-common
(追記終了)
ディレクトリにあるcsvファイルを一括して変換する場合は、以下のとおり。
for f in *.csv; do csv2xlsx "$f"; done
以上、どなたかの参考になれば幸い。