Skip to content

Instantly share code, notes, and snippets.

@t-asa2000
Last active December 13, 2019 07:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save t-asa2000/569586155eceaf1af2471c830b4e45f4 to your computer and use it in GitHub Desktop.
Save t-asa2000/569586155eceaf1af2471c830b4e45f4 to your computer and use it in GitHub Desktop.
openpyxlを使ったExcelファイル処理ツール
# coding: utf-8
# 参照
import copy
import pathlib
import glob
import re
import pprint
import openpyxl
import sys
import datetime
# ★★★ここからは各自の環境に応じて変更してください★★★
# 設定
## 記入済みフォームの入ってるフォルダ
data_folder = 'data'
## テーブルのファイル
table_file = 'table.xlsx'
## フォームのシート名
form_sheetname = 'Sheet1'
## テーブルのシート名
table_sheetname = 'Sheet1'
## フォームの項目(フォーム側のセルの場所を指定)
form_cells = ['C3','C4','C5','C6','C7','C8','C9','C10','C11','C12']
## テーブルの列番号を指定,順番は上と同じ
table_rows = ['C','D','A','E','F','G','H','I','J','K']
## テーブルの更新日時自動記入(セル指定)
table_lastupdate = 'M1'
# ★★★ここまで★★★
# 変数・リスト
## 書き込み中の行番号(1は見出し行)
table_record = 2
## テーブルのセル
table_cells = []
## フォームファイル名リスト
data_files = []
## フォームデータ
data = []
# メイン処理
## form_cellsとtable_rowsの要素数が一致してるか確認
if len(form_cells) != len(table_rows):
print('エラー:form_cellsとtable_rowsの要素数が異なります.')
sys.exit()
## data_folder内のファイル一覧を取得
obj_pathlib = pathlib.Path(data_folder)
for filename in list(obj_pathlib.glob('*.xlsx')):
data_files.append(str(filename))
for filename in data_files:
print(filename + ' を認識しました')
print('全ファイル数: ' + str(len(data_files)))
## テーブルのワークシートを開く
table_wb = openpyxl.load_workbook(table_file)
table_sheet = table_wb[table_sheetname]
## フォームからテーブルへのデータコピー
for filename in data_files:
### メッセージ出力
print(filename + 'から追加中[' + str(table_record - 2) + '/' + str(len(data_files)) + ']')
### テーブル側のセルの場所を指定
for row in table_rows:
table_cells.append(row + str(table_record))
### フォームのワークシートを開く
form_wb = openpyxl.load_workbook(filename)
form_sheet = form_wb[form_sheetname]
### セルのデータをコピー
for form_cell in form_cells:
cell = form_sheet[form_cell]
data.append(cell.value)
for num in range(len(data)):
table_sheet[table_cells[num]] = data[num]
### data,table_cellsの初期化・次の行へ移動
data.clear()
table_cells.clear()
table_record += 1
print('完了[' + str(len(data_files)) + '/' + str(len(data_files)) + ']')
## 更新日時の記入
dt_now = datetime.datetime.now()
table_sheet[table_lastupdate] = dt_now.strftime('%Y年%m月%d日 %H:%M:%S')
## テーブルの上書き保存
print(str(table_file) + ' を上書き保存しています')
table_wb.save(table_file)
print(str(table_file) + ' を上書き保存しました')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment