株式会社ナレッジベースの杉山です。
なんか前回も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も簡単に読み込みができます。