0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CSV ファイルを Python で Excel に変換する方法(単一・一括対応)

0
Posted at

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() を使用してフォルダ内のファイルをループ処理することで効率的な変換が可能です。また、区切り文字の指定やエラー無視オプションの設定など、実際のデータ形式に合わせたカスタマイズ方法についても紹介しました。この変換処理を自動化することで、データ連携やレポート作成の作業効率を大幅に向上させることができます。実際の導入にあたっては、対象ファイルの形式や区切り文字を事前に確認し、適切なパラメータを設定してください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?