[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}")
반응형