2020년 10월 25일 일요일

python excel(makeDataBookTest.py)

 import openpyxl

import readTableDefine
import searchTableName
import datetime

###############################################################################################
# 対象テーブルリスト
###############################################################################################
tableNameList = ["table_a","table_b","table_c"]
###############################################################################################
# ファイルパス定義
###############################################################################################
temp = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
saveBookPath = "makeData_{}.xlsx".format(temp)
srchTableNamePath = 'a5m2_TABLES.xlsx'
tableDefineFilePath = "a5m2_COLUMNS.xlsx"
domainFilePath = "a5m2_DOMAINS.xlsx"
###############################################################################################
# 背景色定義
fill = openpyxl.styles.PatternFill(patternType='solid',
                                   start_color='ccdfff'end_color='ccdfff')
###############################################################################################
# 保存Excelファイルのワークシートの設定行番号定義
###############################################################################################
TABLE_NAME = 3
COLUMN_NAME = 4
LOGICAL_NAME = 5 
IS_NULLABLE = 6
DATA_TYPE = 7
KEY_POSITION = 8 # PK
###############################################################################################
# 1.ワークブックオブジェクト取得
# 2.テーブル定義読取処理を呼び出し、検索テーブル(リスト)に該当する項目定義(リスト)取得
# 3.取得結果のキー:テーブル名(物理名)を元に該当項目定義を取得し、
#   保存ブックパスのワークシートに該当項目定義を設定
# 4.ワークブック保存
###############################################################################################
# 1.ワークブックオブジェクト取得
wb = openpyxl.Workbook()
wb.active
# 2.テーブル定義読取処理を呼び出し、検索テーブル(リスト)に該当する項目定義(リスト)取得
dic = readTableDefine.MyReadTableDefine(tableNameList, tableDefineFilePath, domainFilePath).read() 
# 3.取得結果のキー:テーブル名(物理名)を元に該当項目定義を取得し、保存ブックパスのワークシートに該当項目定義を設定
for idx, key in enumerate(dic):
    start_colNo = 3
    ws = []
    if idx == 0:
        ws = wb.worksheets[idx]
        ws.title = key[0:30# 桁超えしないように 
    else:
        wb.create_sheet(title=key, index=idx)    
        ws = wb[key]
    
    # 項目定義(リスト)から項目定義を取得
    for colInfo in dic[key]:
        start_rowNo = 3
        #ws.cell(row=TABLE_NAME, column=start_colNo).value = colInfo.table_name
        # 行3、列3にテーブル名(物理名)設定
        if start_rowNo == 3 and start_colNo == 3:
            ws.cell(row=TABLE_NAME, column=start_colNo).value = colInfo.table_name
            # 論理名検索処理を呼び出し、行3、列4にテーブル名(論理名)設定
            ws.cell(row=TABLE_NAME, column=start_colNo+1).value = searchTableName.MySearchTableName(
                                                                    srchTableNamePath, colInfo.table_name).searchJp() 
        # 項目名(物理名)設定(行:4,列:該当start_colNo)                                                                    
        ws.cell(row=COLUMN_NAME, column=start_colNo).value = colInfo.column_name
        # 項目名(論理名)設定(行:5,列:該当start_colNo)                                                                    
        ws.cell(row=LOGICAL_NAME, column=start_colNo).value = colInfo.logical_name
        # NULL許可フラグ設定(行:6,列:該当start_colNo)                                                                    
        ws.cell(row=IS_NULLABLE, column=start_colNo).value = colInfo.is_nullable
        # データ型設定(行:7,列:該当start_colNo)                                                                    
        ws.cell(row=DATA_TYPE, column=start_colNo).value = colInfo.data_type
        # キーポジション設定(行:8,列:該当start_colNo)                                                                    
        ws.cell(row=KEY_POSITION, column=start_colNo).value = colInfo.key_position
        # 背景設定(行3~9の該当列)、中央揃え
        if start_rowNo >= 3 and start_rowNo <=9:
            ws.cell(row=start_rowNo, column=start_colNo).fill = fill
            ws.cell(row=start_rowNo, column=start_colNo).alignment = openpyxl.styles.Alignment(horizontal='center')
        start_rowNo += 1
        start_colNo += 1      
    
# 4.ワークブック保存
wb.save(saveBookPath)
###############################################################################################

댓글 없음:

댓글 쓰기