フヨダ

自分の勉強と記憶力改善のために、興味あることを書いていきます なるべく分かりやすく

エクセルファイルのすべてのシートを一個ずつCSVファイルに変換してくれるプログラム

退屈な事はpythonにやらせようの14章の演習問題

 

こんな感じです。本が3年前のなので、本書に書かれてるopenpyxlの関数がちょっと古かったりして、注意が必要。

 

なんか、自動で膨大なデータをちゃかちゃか処理してくれるって、すごい良い。

python知らない人でも、anaconda3インストールして、このプログラムを

.pyつけて保存して、処理したいエクセルファイルがあるフォルダに突っ込んで起動すれば使えると思います。

 

#! Python3
# -*- coding: utf-8 -*-
# xlsxToCsv.py - exelデータを読み込んで、すべてのシートをCSVにする

import openpyxl, csv, os

foldername = "xlsxToCsv"
os.makedirs(foldername, exist_ok=True)

for xlsx_file in os.listdir("."):
    # .xlsxでなければスキップ
    if not xlsx_file.lower().endswith(".xlsx"):
        continue
    # ワークブック内をシートごとに全コピーしてCSVを作る
    print("ファイルが見つかりました {}を処理します...".format(xlsx_file))
    
    wb = openpyxl.load_workbook(xlsx_file)

    for sheetname in wb.sheetnames:
        sheet = wb[sheetname]
        excelファイル名とシート名からCSV名を作ってファイルを作る
        csv_name = xlsx_file[:-5] + "_" + sheetname + ".csv"
        csv_file = open(os.path.join(foldername, csv_name),"w", newline="")
        csv_writer = csv.writer(csv_file)
        
        csvライターには["文字", "文字"]とリスト型で一行ずつデータを渡したいのでデータを作る
        for Row in range(1, sheet.max_row + 1):
            # 毎行ごとにrow_listは初期化される
            row_list = []
            for Col in range(1, sheet.max_column + 1):
                row_list.append(str(sheet.cell(Row, Col).value))
            csv_writer.writerow(row_list)
        # 書き込みが終了したらファイルを保存するコマンドは必要ないのでファイルを閉じとく
        csv_file.close()
print("完了")