PythonでExcelを読み込んでCSV出力

Pocket

株式会社ナレッジベースの杉山です。

なんか前回もCSV形式で出力していたのですが、今回PythonでCSVを出力します。

入力で使用するのはExcelで作成したブックになります。

入力するファイルは以下のようなファイルです。

今回はVisual Studio Code上でopenpyxlを使用しました。

とても簡単にExcelを取り扱うことができます。

作成したソースは下記のとおりです。

from ipaddress import collapse_addresses
from unittest import result
import openpyxl
import csv
import os
from datetime import datetime as dt

# ファイルの入力、出力先フォルダ
inpath = r'C:\workspace\excel\input'
outpath = r'C:\workspace\excel\output'

# 入力ファイルのリストを取得したリストをすべて処理する
filelist = os.listdir(inpath)
for fil in filelist:
    # 入力ファイルを開く
    wb = openpyxl.load_workbook(os.path.join(inpath, fil))

    # 出力ファイル名の編集(入力ファイル名 + ".csv")し、書き込む
    outfilename = os.path.splitext(os.path.basename(fil)) 
    outfile = os.path.join(outpath, outfilename[0] + ".csv")
    with open(outfile ,'w', encoding='utf-8', newline='') as f:
        # 出力ファイル用ライタの生成
        wr = csv.writer(f)

        # 入力用ExcelのBook内のsheetを順次読み込み、出力ファイルに書き出す
        for ws in wb.worksheets:

            # sheetを一行ごとに処理を実施する(先頭行は読み飛ばし)
            for i in range(2, ws.max_row + 1):
                # CSV出力に使用する配列を初期化
                cols = []
                # 配列にセルの値(ws.cell(row, column).value)を
                # 文字列に変換して出力
                cols.append(str(ws.cell(i, 1).value))
                cols.append(str(ws.cell(i, 2).value))
                # セルの値をそのまま出力
                cols.append(ws.cell(i, 3).value)
                # セルの値を日付型に変換して出力
                cols.append(dt.strftime(ws.cell(i, 4).value, '%Y/%m/%d'))
                # セルの値を日付型に変換して出力、値が未設定の場合は、''で出力
                cols.append(
                    '' if ws.cell(i, 5).value is None 
                    else dt.strftime(ws.cell(i, 5).value, '%Y/%m/%d'))
                # セルの値を数値(小数点以下2桁有効)で出力
                cols.append(format(ws.cell(i, 6).value, '.2f'))
                # セルの値をそのまま出力、値が設定されていない場合は、''で出力
                cols.append(
                    '' if ws.cell(i, 7).value is None 
                    else ws.cell(i, 7).value)
                # 配列の値をCSV形式で出力
                wr.writerow(cols)

出力されたファイルは下記のとおりです。

複数のBookもSheetも簡単に読み込みができます。

 

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA