ExcelファイルをCSVファイルに変換するシェルスクリプト

このシェルスクリプトは、指定したディレクトリ内のすべてのExcelファイル(.xlsx形式)をCSVファイルに変換し、別のディレクトリに保存します。変換にはPythonの xlsx2csv ライブラリを使用します。

事前準備

1. Pythonのインストール

Pythonがシステムにインストールされていることを確認してください。

2. xlsx2csv ライブラリのインストール

xlsx2csv は、ExcelファイルをCSVに変換するためのPythonライブラリです。以下のコマンドでインストールできます。

pip install xlsx2csv

シェルスクリプト

以下の内容を .sh ファイル(例: excel_to_csv.sh)として保存します。

#!/bin/bash

# 変換対象のExcelファイルが存在するディレクトリ
# 例: デスクトップにあるExcelファイルを対象にする場合
input_dir="${HOME}/Desktop"

# 変換後のCSVファイルを保存するディレクトリ
# 例: デスクトップにcsv_outputディレクトリを作成する場合
output_dir="${HOME}/Desktop/csv_output"

# 出力ディレクトリが存在しない場合は作成する
mkdir -p "${output_dir}"

# ExcelファイルをCSVに変換する関数
# 引数: $1 - 入力Excelファイルのフルパス
convert_excel_to_csv() {
    local input_file="$1"
    # 出力ファイル名を生成 (元のファイル名から拡張子を除き、.csvを付与)
    local output_file="${output_dir}/$(basename "${input_file%.*}").csv"

    echo "Converting '${input_file}' to '${output_file}'..."
    
    # python3 -m xlsx2csv を使って変換を実行
    # -m オプションは、モジュールをスクリプトとして実行することを意味する
    python3 -m xlsx2csv "${input_file}" "${output_file}"

    if [ $? -eq 0 ]; then # 直前のコマンドの終了ステータスが0なら成功
        echo "Conversion successful: '${output_file}'"
    else
        echo "Conversion failed for: '${input_file}'" >&2 # エラーメッセージは標準エラー出力へ
    fi
}

# 指定ディレクトリ内のすべての.xlsxファイルをループ処理
# for ... in ...; do ... done 構文
for excel_file in "${input_dir}"/*.xlsx; do
    # ファイルが存在するかチェック (ファイルがない場合にループが1回実行されるのを防ぐ)
    if [ -f "${excel_file}" ]; then
        convert_excel_to_csv "${excel_file}"
    fi
done

echo "All Excel files processed."

スクリプトの実行方法

  1. 上記のスクリプトを excel_to_csv.sh などの名前で保存します。
  2. スクリプトに実行権限を付与します。
    chmod +x excel_to_csv.sh
    
  3. スクリプトを実行します。
    ./excel_to_csv.sh
    

スクリプトの解説

  • #!/bin/bash: このスクリプトをBashシェルで実行することを指定します。
  • input_dir, output_dir: 変換元と変換先のディレクトリパスを定義します。${HOME} はユーザーのホームディレクトリを表します。
  • mkdir -p "${output_dir}": 変換後のCSVファイルを保存するディレクトリが存在しない場合に作成します。-p オプションは、親ディレクトリも同時に作成し、既に存在してもエラーにしないようにします。
  • convert_excel_to_csv() 関数:
    • local: 関数内で定義された変数がローカル変数であることを示します。
    • basename "${input_file%.*}": ファイル名からパスと拡張子を除去します。
    • python3 -m xlsx2csv "${input_file}" "${output_file}": xlsx2csv モジュールを実行し、ExcelファイルをCSVに変換します。
    • if [ $? -eq 0 ]: 直前のコマンドの終了ステータス $? が0(成功)かどうかをチェックします。
  • for excel_file in "${input_dir}"/*.xlsx; do ... done: input_dir 内のすべての .xlsx 拡張子のファイルをループ処理します。
  • if [ -f "${excel_file}" ]; then ... fi: ループ内で見つかったものが実際にファイルであるかを確認します。これは、*.xlsx にマッチするファイルがない場合にループが1回実行されてしまうのを防ぐためです。

このスクリプトは、Excelファイルを一括でCSVに変換する際に役立ちます。