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に変換
- csvkit …
csvcut
,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ファイルを扱うのは難しい」と思われがちですが、コマンドラインツールを組み合わせれば十分に実用的です。
サーバーサイドでの業務自動化や、データ処理パイプラインの一部として活用してみてください。