[Python] openpyxl 예제(2)

2024. 1. 8. 09:59카테고리 없음

 

openpyxl을 사용하여 이전에 등록했었던 것과 다른 예제를 써보려한다. 

이전 내용에서 설치하는 방법은 이미 설명되어 생략하였다. 

1. 데이터베이스 연결 및 class를 사용한 FetchBOM이라는 class 파일을 생성

from DAO.DBDO import *
from openpyxl import Workbook

class FetchBOMClass:
    def __init__(self):
        print(f" _____________ INIT _____________ {FetchBOMClass}")

        self.main_no = "2009"
        self.model_no = "441"
        self.model_team = "1"

        self.DBDO = DBDOClass()
        self.workbook = Workbook()
        self.sheet = self.workbook.active

        self.FetchBOM()

    def FetchBOM(self):
        ar_unit_code, ar_use_cnt = self.DBDO.getFetchBOM(self.model_no, self.workbook)
        i = 1
        j = 1

        self.sheet[f"A1"] = "품번"
        self.sheet[f"B1"] = "품명"
        self.sheet[f"C1"] = "규격"
        self.sheet[f"D1"] = "수량"

        for unit_code, unit_use_cnt in zip(ar_unit_code, ar_use_cnt):

            i = i + 1
            print(unit_code)
            print(unit_use_cnt)
            self.sheet[f"A{i}"] = unit_code
            self.sheet[f"D{i}"] = float(unit_use_cnt)

        self.workbook.save(f'./XLS/{self.main_no}_{self.model_no}_{self.model_team}.xlsx')

if __name__ == "__main__":
    FetchBOMClass()

 

2. DB연동하여 결과를 리턴

 

이 또한 클래스에서 가져오는 결과라 self의 내용을 처리 및 확인하여야 한다. 

    def getFetchBOM(self, model_no, workbook):
        try:
            connection = MysqlStockManagerController()
            cursor = connection.cursor()
            sql = (f"SELECT T1.bu_idx, T1.model_idx, T1.unit_idx, T1.unit_use_cnt, "
                   f"T2.unit_code "
                   f"FROM KJ_BModelUnit AS T1 "
                   f"INNER JOIN KJ_Unit AS T2 "
                   f"ON T1.unit_idx = T2.unit_idx "
                   f"WHERE model_idx = {model_no}  ORDER BY T2.unit_code ASC")
            print(sql)
            cursor.execute(sql)
            rows = cursor.fetchall()
            connection.close()

            ar_unit_code = []
            ar_unit_cnt = []

            for rs in rows:
                unit_use_cnt = rs[3]
                unit_code = rs[4]
                ar_unit_code.append(unit_code)
                ar_unit_cnt.append(unit_use_cnt)

            return ar_unit_code, ar_unit_cnt

        except Exception as e:
            print(f" ________ getFetchBOM ______________ {e}")

 

 

반응형