# coding: shift_jis
import glob
import openpyxl as excel
# 対象フォルダと保存先のファイル名を指定
dirName = "./ExcelWorkDir/"
target_dir = dirName + 'salesbooks'
save_file = dirName + 'matome.xlsx'
# メイン処理 --- (*1)
def exe():
# 売上一覧を書き込むブックを用意する
book = excel.Workbook()
main_sheet = book.active
# ファイルをを列挙して読む
enumfiles(main_sheet)
# 読み込んだデータを保存
book.save(save_file)
# ファイルを列挙する --- (*2)
def enumfiles(main_sheet):
# Excelファイルの一覧を得る --- (*3)
files = glob.glob(target_dir + '/*.xlsx')
# 各Excelブックを次々と読んでいく --- (*4)
for fname in files:
read_book(main_sheet, fname)
# ブックを開いて中身を読む --- (*5)
def read_book(main_sheet, fname):
print("read:", fname)
# Excelブックを読み込む --- (*6)
book = excel.load_workbook(fname, data_only=True)
sheet = book.active
# 売上データのある範囲を読み取る --- (*7)
rows = sheet["A4":"F999"]
for row in rows:
# セルの値をリストとして得る --- (*8)
values = [cell.value for cell in row]
if values[0] is None: break
print(values)
# メインシートに値をコピー --- (*9)
main_sheet.append(values)
# メインプログラムを実行 --- (*10)
if __name__ == "__main__":
exe()
# ファイル保存場所:C:\Users\PC-USER\source\repos\PythonApplication1\PythonApplication1
# ファイルを保存 --- (*5)
dirName = dirName + 'hello.xlsx'
#book.save(dirName)
IyBjb2Rpbmc6IHNoaWZ0X2ppcwoKaW1wb3J0IGdsb2IKaW1wb3J0IG9wZW5weXhsIGFzIGV4Y2VsCgojIOWvvuixoeODleOCqeODq+ODgOOBqOS/neWtmOWFiOOBruODleOCoeOCpOODq+WQjeOCkuaMh+WumgpkaXJOYW1lID0gIi4vRXhjZWxXb3JrRGlyLyIKdGFyZ2V0X2RpciA9IGRpck5hbWUgKyAnc2FsZXNib29rcycKc2F2ZV9maWxlID0gZGlyTmFtZSArICdtYXRvbWUueGxzeCcKIyDjg6HjgqTjg7Plh6bnkIYgLS0tICgqMSkKZGVmIGV4ZSgpOgogICMg5aOy5LiK5LiA6Kan44KS5pu444GN6L6844KA44OW44OD44Kv44KS55So5oSP44GZ44KLCiAgYm9vayA9IGV4Y2VsLldvcmtib29rKCkKICBtYWluX3NoZWV0ID0gYm9vay5hY3RpdmUKICAjIOODleOCoeOCpOODq+OCkuOCkuWIl+aMmeOBl+OBpuiqreOCgAogIGVudW1maWxlcyhtYWluX3NoZWV0KQogICMg6Kqt44G/6L6844KT44Gg44OH44O844K/44KS5L+d5a2YCiAgYm9vay5zYXZlKHNhdmVfZmlsZSkKCiMg44OV44Kh44Kk44Or44KS5YiX5oyZ44GZ44KLIC0tLSAoKjIpCmRlZiBlbnVtZmlsZXMobWFpbl9zaGVldCk6CiAgIyBFeGNlbOODleOCoeOCpOODq+OBruS4gOimp+OCkuW+l+OCiyAtLS0gKCozKQogIGZpbGVzID0gZ2xvYi5nbG9iKHRhcmdldF9kaXIgKyAnLyoueGxzeCcpCiAgIyDlkIRFeGNlbOODluODg+OCr+OCkuasoeOAheOBqOiqreOCk+OBp+OBhOOBjyAtLS0gKCo0KQogIGZvciBmbmFtZSBpbiBmaWxlczoKICAgIHJlYWRfYm9vayhtYWluX3NoZWV0LCBmbmFtZSkKCiMg44OW44OD44Kv44KS6ZaL44GE44Gm5Lit6Lqr44KS6Kqt44KAIC0tLSAoKjUpCmRlZiByZWFkX2Jvb2sobWFpbl9zaGVldCwgZm5hbWUpOgogIHByaW50KCJyZWFkOiIsIGZuYW1lKQogICMgRXhjZWzjg5bjg4Pjgq/jgpLoqq3jgb/ovrzjgoAgLS0tICgqNikKICBib29rID0gZXhjZWwubG9hZF93b3JrYm9vayhmbmFtZSwgZGF0YV9vbmx5PVRydWUpCiAgc2hlZXQgPSBib29rLmFjdGl2ZQogICMg5aOy5LiK44OH44O844K/44Gu44GC44KL56+E5Zuy44KS6Kqt44G/5Y+W44KLIC0tLSAoKjcpCiAgcm93cyA9IHNoZWV0WyJBNCI6IkY5OTkiXQogIGZvciByb3cgaW4gcm93czoKICAgICMg44K744Or44Gu5YCk44KS44Oq44K544OI44Go44GX44Gm5b6X44KLIC0tLSAoKjgpCiAgICB2YWx1ZXMgPSBbY2VsbC52YWx1ZSBmb3IgY2VsbCBpbiByb3ddCiAgICBpZiB2YWx1ZXNbMF0gaXMgTm9uZTogYnJlYWsKICAgIHByaW50KHZhbHVlcykKICAgICMg44Oh44Kk44Oz44K344O844OI44Gr5YCk44KS44Kz44OU44O8IC0tLSAoKjkpCiAgICBtYWluX3NoZWV0LmFwcGVuZCh2YWx1ZXMpCgojIOODoeOCpOODs+ODl+ODreOCsOODqeODoOOCkuWun+ihjCAtLS0gKCoxMCkKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICBleGUoKQoKIyDjg5XjgqHjgqTjg6vkv53lrZjloLTmiYDvvJpDOlxVc2Vyc1xQQy1VU0VSXHNvdXJjZVxyZXBvc1xQeXRob25BcHBsaWNhdGlvbjFcUHl0aG9uQXBwbGljYXRpb24xCiMg44OV44Kh44Kk44Or44KS5L+d5a2YIC0tLSAoKjUpCmRpck5hbWUgPSBkaXJOYW1lICsgJ2hlbGxvLnhsc3gnCiNib29rLnNhdmUoZGlyTmFtZSkKCg==