python

murata private 複数エクセルファイル内の値をまとめて1つのCSVファイルに出力する

import pathlib  # 標準ライブラリ
import openpyxl # 外部ライブラリ pip install openpyxl
import csv      # 標準ライブラリ

# ワークブックを作成
new_workbook = openpyxl.Workbook()          
# デフォルトで作成されるワークシートを選択
new_sheet = new_workbook.active                   


new_row = 1

# ..\ → このプログラムの親フォルダを示す。(.\だけだとカレントフォルダを示す。)
path = pathlib.Path("..\data\targetfolder")    #相対パス指定

#  path.iterdir() → ディレクトリ内のファイル・サブディレクトリ一覧を取得
for all_obj in path.iterdir():
    # 拡張子がxlsxかを判定
    if all_obj.match("*.xlsx"):
        # ワークブックの読み込み  //最初からglobを使用すればいいのでは?
        wb = openpyxl.load_workbook(all_obj)
        # ワークブックからシートを順に読み込み
        for target_sheet in wb:
            #シートの9行目から18行目までを操作するように指示    //xlupのように始まりと終わりが分からない場合に対応させるには?
            for target_row in range(9,19):
                # 対象行の2番目の列に、データが入力されいるかを調べる。
                if target_sheet.cell(target_row, 2).value != None:
                    #より説明的なコード
                    #new_sheet.cell(row=new_row, column=1).value = \
                    #    target_sheet.cell(row=2, column=7).value   #伝票NO

                    #対象ファイルの2行目7列目を、作成したシートの対象行のlist_row行目の1列目に転記
                    new_sheet.cell(new_row, 1).value = target_sheet.cell(2, 7).value   #伝票NO
                    # 以下同様の考え
                    new_sheet.cell(new_row, 2).value = target_sheet.cell(3, 7).value   #日付
                    new_sheet.cell(new_row, 3).value = target_sheet.cell(4, 3).value   #得意先コード
                    new_sheet.cell(new_row, 4).value = target_sheet.cell(7, 8).value   #担当者コード

                    #対象ファイルのdt_row行目の1列目を、作成したシートのlist_row行目の1列目に転記
                    new_sheet.cell(new_row, 5).value = target_sheet.cell(target_row, 1).value #No  
                    #以下同様                  
                    new_sheet.cell(new_row, 6).value = target_sheet.cell(target_row, 2).value #商品コード 
                    new_sheet.cell(new_row, 7).value = target_sheet.cell(target_row, 3).value #商品名
                    new_sheet.cell(new_row, 8).value = target_sheet.cell(target_row, 4).value #数量
                    new_sheet.cell(new_row, 9).value = target_sheet.cell(target_row, 5).value #単価
                    
                    # 「\」 → 行継続の記号
                    #  対象ファイルのdt_row行目の4列目と5列目の積を、作成したシートのlist_row行目の10列目に転記
                    new_sheet.cell(new_row, 10).value = target_sheet.cell(target_row, 4).value * \
                                                target_sheet.cell(target_row, 5).value #金額
                    new_sheet.cell(new_row, 11).value = target_sheet.cell(target_row, 7).value #備考   

                    # 新しいデータ下に追加できるように、list_rowに1を加算                                
                    new_row += 1

#new_workbook.save("..\data\sales\salesList.xlsx")

# ファイルの保存

# 引数として、ファイル名、モード、エンコーディングを指定
with open("..\newList.csv","w",encoding="utf_8_sig") as fp:
    
    writer = csv.writer(fp, lineterminator="\n")

    # 作成したシートの各行を取得
    for row in new_sheet.rows:
        # 各行から各列を取り出し、リストにする。
        # その1行分のリストをwriter.writerow()により、csvとして出力する。
        writer.writerow([col.value for col in row])
Was this helpful?