ひゃまだのblog

ひゃまだ(id:hymd3a)の趣味のブログ

LibreOfficeを使ってコマンドラインでCSVファイルをエクセルファイル(xlsx)ファイルに変換する

(2024-04-30 初稿 -2024-05-01 追記)

先日からCSVファイルを操作するスクリプトを作成している。

作成する中で、LibreOfficeコマンドラインCSVファイルをエクセルファイル(xlsx)に変換する機能があることを見つけた。

最初は、CSVファイルを右クリックして、LibreOfficeまたはExcelで読み込めば、ダイアログが出て普通に読み込めるから不要かな…と思ったのだが、以下の2つの理由から変換のスクリプトを作成することにした。

  1. CSVファイルが多数ある場合等に変換を自動化したい
  2. LibreOfficeの変換のオプションが多数あり、覚えられない

ワンライナーBashスクリプトなので、さっそく作成した。

ちなみに、筆者は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:  ダブルクォート

76: 文字コード UTF-8

      その他文字コード  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

以上、どなたかの参考になれば幸い。

関連ページ