CSV(Comma-Separated Values)は、データ交換フォーマットとして広く利用されています。軽量で互換性が高く、様々なシステムやアプリケーション間でのデータ連携に適しています。一方、Excel はデータの分析や編集、書式設定に優れたツールであり、CSV データを Excel 形式で扱いたいニーズは多くあります。
本記事では、Python を使用して CSV ファイルを Excel(XLSX)形式に変換する方法を紹介します。単一ファイルの変換から複数ファイルの一括変換まで、段階的に説明します。
対象読者
- Python で CSV データを Excel に変換する処理を実装したい開発者
- データ移行やレポート生成の自動化を検討している方
- 複数の CSV ファイルを効率的に処理したい方
必要なライブラリのインストール
本記事のサンプルコードを実行するには、以下のライブラリが必要です。
pip install spire.xls
このライブラリは Microsoft Office がインストールされていない環境でも動作します。
単一の CSV ファイルを変換する
Spire.XLS for Python を使用すると、Workbook.LoadFromFile() メソッドで CSV ファイルを直接読み込み、Workbook.SaveToFile() メソッドで Excel 形式で保存するだけで変換が完了します。
from spire.xls import *
from spire.xls.common import *
# Workbook オブジェクトを作成
workbook = Workbook()
# CSV ファイルを読み込む(区切り文字: カンマ, 開始行: 1, 開始列: 1)
workbook.LoadFromFile("input.csv", ",", 1, 1)
# 最初のワークシートを取得
sheet = workbook.Worksheets[0]
# エラー無視オプションを設定(数値がテキストとして保存されている場合の警告を無視)
sheet.AllocatedRange.IgnoreErrorOptions = IgnoreErrorType.NumberAsText
# 列幅を自動調整
sheet.AllocatedRange.AutoFitColumns()
# Excel ファイルとして保存
workbook.SaveToFile("output.xlsx", ExcelVersion.Version2013)
# リソースを解放
workbook.Dispose()
Workbook.LoadFromFile() のパラメータは以下の通りです:
- 第1引数:CSVファイルのパス
- 第2引数:区切り文字(カンマの場合は",")
- 第3引数:読み込み開始行(1始まり)
- 第4引数:読み込み開始列(1始まり)
区切り文字のバリエーションに対応する
CSV といっても、実際にはカンマ以外の区切り文字(タブやセミコロンなど)が使われることもあります。LoadFromFile() の第 2 引数を変更することで柔軟に対応できます。
# タブ区切りの場合
workbook.LoadFromFile("data.tsv", "\t", 1, 1)
# セミコロン区切りの場合
workbook.LoadFromFile("data.csv", ";", 1, 1)
複数ファイルを一括変換する
複数の CSV ファイルをまとめて Excel に変換する場合は、os モジュールを使用してフォルダ内のファイルをループ処理します。
import os
from spire.xls import *
from spire.xls.common import *
input_folder = "./csv_files"
output_folder = "./excel_output"
# 出力フォルダが存在しない場合は作成
os.makedirs(output_folder, exist_ok=True)
# フォルダ内の全 CSV ファイルをループ処理
for csv_file in os.listdir(input_folder):
if csv_file.endswith(".csv"):
input_path = os.path.join(input_folder, csv_file)
output_name = os.path.splitext(csv_file)[0] + ".xlsx"
output_path = os.path.join(output_folder, output_name)
# Workbook インスタンスを作成しCSVを読み込む
workbook = Workbook()
workbook.LoadFromFile(input_path, ",", 1, 1)
# 各 CSV ファイルを Excel として保存
workbook.SaveToFile(output_path, ExcelVersion.Version2013)
workbook.Dispose()
print(f"変換完了: {csv_file} -> {output_name}")
エラー無視オプションの詳細
CSV から Excel に変換する際、数値がテキストとして認識されるケースがあります。IgnoreErrorOptions を設定することで、こうした警告を無視して変換を完了できます。
# 特定の範囲にのみエラー無視を適用
sheet.Range["B2:D11"].IgnoreErrorOptions = IgnoreErrorType.NumberAsText
# 全範囲に適用
sheet.AllocatedRange.IgnoreErrorOptions = IgnoreErrorType.NumberAsText
サンプルコード全体
ここまでの処理をまとめた完全なコード例を示します。
import os
from spire.xls import *
from spire.xls.common import *
def convert_csv_to_excel(csv_path, excel_path, delimiter=","):
workbook = Workbook()
workbook.LoadFromFile(csv_path, delimiter, 1, 1)
sheet = workbook.Worksheets[0]
sheet.AllocatedRange.IgnoreErrorOptions = IgnoreErrorType.NumberAsText
sheet.AllocatedRange.AutoFitColumns()
workbook.SaveToFile(excel_path, ExcelVersion.Version2013)
workbook.Dispose()
print(f"変換完了: {excel_path}")
def batch_convert_csv_to_excel(input_folder, output_folder, delimiter=","):
os.makedirs(output_folder, exist_ok=True)
for csv_file in os.listdir(input_folder):
if csv_file.endswith(".csv"):
input_path = os.path.join(input_folder, csv_file)
output_path = os.path.join(output_folder, csv_file.replace(".csv", ".xlsx"))
workbook = Workbook()
workbook.LoadFromFile(input_path, delimiter, 1, 1)
sheet = workbook.Worksheets[0]
sheet.AllocatedRange.IgnoreErrorOptions = IgnoreErrorType.NumberAsText
sheet.AllocatedRange.AutoFitColumns()
workbook.SaveToFile(output_path, ExcelVersion.Version2013)
workbook.Dispose()
print(f"変換完了: {csv_file}")
# 単一変換
convert_csv_to_excel("input.csv", "output.xlsx")
# 一括変換
batch_convert_csv_to_excel("./csv_files", "./excel_output")
補足事項
-
Workbook.LoadFromFile()を使用することで、CSV パーサーを別途実装する必要がなく、コードが大幅に簡素化されます - 大量のデータを扱う場合でも、ライブラリは効率的に処理を行います
- Excel ライブラリは Office 非依存で動作するため、サーバー環境でのバッチ処理に適しています
- 必要に応じて、変換後の Excel ファイルに書式設定やグラフを追加することも可能です
まとめ
本記事では、Python と Excel 操作用ライブラリを組み合わせて、CSV ファイルを Excel(XLSX)形式に変換する方法を説明しました。単一ファイルの変換では、Workbook.LoadFromFile() で CSV を直接読み込み、Workbook.SaveToFile() で Excel 形式で保存するという簡潔な流れを示しました。複数ファイルの一括変換では、os.listdir() を使用してフォルダ内のファイルをループ処理することで効率的な変換が可能です。また、区切り文字の指定やエラー無視オプションの設定など、実際のデータ形式に合わせたカスタマイズ方法についても紹介しました。この変換処理を自動化することで、データ連携やレポート作成の作業効率を大幅に向上させることができます。実際の導入にあたっては、対象ファイルの形式や区切り文字を事前に確認し、適切なパラメータを設定してください。