LinuxシェルスクリプトでExcelファイル(.xlsx)操作:csv変換からシンプル集計自動化まで

Excelファイルを扱う場面は、WindowsやOffice環境だけではありません。
Linuxサーバーで定期的に集計処理を自動化したい場合にも「.xlsx形式のデータ」が送られてくることがあります。

本記事では LinuxシェルスクリプトだけでExcelファイルを処理する方法 を紹介します。
対象は以下のようなケースです。

  • 毎日メールで送られてくるExcelファイルを処理したい
  • Excelを開けないLinux環境でCSVに変換したい
  • 簡単な集計(件数・合計など)を自動化したい

1. LinuxでExcel(.xlsx)を扱うための準備

Linuxには標準でExcel操作機能はありませんが、便利なコマンドラインツールがあります。

必要なパッケージ例

Ubuntu/Debianの場合

sudo apt update
sudo apt install gnumeric       # ssconvert を提供
sudo apt install xlsx2csv       # シンプルなxlsx → csv変換
sudo apt install csvkit         # csv処理を便利にするツール群

主要ツール:

  • ssconvert … ExcelファイルをCSVやODSに変換できる(Gnumeric由来)
  • xlsx2csv … 軽量でシンプルに.xlsxを.csvに変換
  • csvkitcsvcut, csvgrep, csvstat などでCSVを自在に扱える

2. ExcelファイルをCSVに変換する

方法1:ssconvertを使う

ssconvert input.xlsx output.csv

複数シートがある場合はシート番号を指定

ssconvert --export-options=sheet=2 input.xlsx output.csv

方法2:xlsx2csvを使う

xlsx2csv input.xlsx > output.csv

シートごとに別ファイルに出力したい場合

xlsx2csv -s 0 input.xlsx sheet1.csv
xlsx2csv -s 1 input.xlsx sheet2.csv

3. シェルスクリプトで自動化する例

毎日送られてくるExcelファイルを /data/excel/ に保存し、CSVに変換してから件数と合計を集計するスクリプト例です。

#!/bin/bash
# excel_to_csv.sh

INPUT_DIR="/data/excel"
OUTPUT_DIR="/data/csv"
DATE=$(date +%Y%m%d)

mkdir -p "$OUTPUT_DIR"

for file in "$INPUT_DIR"/*.xlsx; do
    filename=$(basename "$file" .xlsx)
    csvfile="$OUTPUT_DIR/${filename}_${DATE}.csv"

    # Excel → CSV変換
    xlsx2csv "$file" > "$csvfile"

    # CSVから件数と合計を集計(例:2列目の数値を合計)
    ROWS=$(wc -l < "$csvfile")
    SUM=$(awk -F, '{sum += $2} END {print sum}' "$csvfile")

    echo "ファイル: $filename"
    echo "行数: $ROWS"
    echo "2列目の合計: $SUM"
    echo "-------------------------"
done

実行方法:

bash excel_to_csv.sh

出力例:

ファイル: sales_report
行数: 101
2列目の合計: 250000
-------------------------

4. cronで定期実行する

毎日午前3時に処理したい場合は、crontab -e に以下を追加

0 3 * * * /usr/bin/bash /data/script/excel_to_csv.sh >> /data/log/excel.log 2>&1

これでExcel → CSV変換と集計が自動で回ります。


5. 応用:CSV集計をさらに便利にするツール

  • csvstat(csvkit) csvstat output.csv → 列ごとの最大値・最小値・平均などを一発で確認可能。
  • csvcut csvcut -c 1,3 output.csv → 必要な列だけ抽出。
  • csvgrep csvgrep -c "商品名" -m "ノートPC" output.csv → 特定条件でフィルタリング。

まとめ

  • Linuxでも ssconvert / xlsx2csv / csvkit を使えばExcelファイルを操作できる
  • シェルスクリプト化すれば 定期的なCSV変換+集計の自動化 が可能
  • WindowsやExcelに依存せず、サーバーでそのまま処理できる

「Linux環境でExcelファイルを扱うのは難しい」と思われがちですが、コマンドラインツールを組み合わせれば十分に実用的です。
サーバーサイドでの業務自動化や、データ処理パイプラインの一部として活用してみてください。

タイトルとURLをコピーしました