Dandy Now!
  • [Python] dbm to xlsx 어플리케이션 만들기
    2021년 12월 01일 12시 00분 34초에 업로드 된 글입니다.
    작성자: DandyNow
    728x90
    반응형

    제작 동기

     

    [그림1] 완성된 "dbm to xlsx"

     

    Microsoft Access의 dbm에서 원하는 기간에 해당하는 row를 xlsx파일로 내보내는 [그림1]과 같은 어플리케이션을 만들어 보았다.

    그동안 생산 작업일보를 Access로 관리하고 있었고,

    Access의 보고서 기능을 이용해 부장님께 일일 생산보고를 진행해 왔었다.

    어느날 부장님께서는 직접 데이터를 다루기 원하셨다.

    하지만 Excel에 익숙하신 부장님은 Access를 불편해 하셨다.

    그래서 dbm to xlsx 어플리케이션을 만들게 되었다.

     


    작성 코드

    사용된 주요 Python 라이브러리는 PyQt5, pandas, pyodbc 이다.

    import sys
    from PyQt5.QtWidgets import *
    from PyQt5.QtCore import *
    from PyQt5 import uic
    import jenaxUI_rc
    import os
    import pandas as pd
    from pandas import Series, DataFrame, ExcelWriter
    import csv, pyodbc
    
    # PyQt5 ui파일 위치 경로 설정
    def resource_path(relative_path):
        """ Get absolute path to resource, works for dev and for PyInstaller """
        base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))
        return os.path.join(base_path, relative_path)
    
    # dateEdit.ui 폼 적용
    form = resource_path('dateEdit.ui')
    form_class = uic.loadUiType(form)[0]
    
    class WindowClass(QMainWindow, form_class) :
        def __init__(self) :
            super().__init__()
            self.setupUi(self)
    
            # 프로그램이 실행 시 DateEdit의 값을 현재 날짜로 설정
            self.currentDate = QDate.currentDate()
            self.dateEdit_Test.setDate(self.currentDate)
            self.currentDate = QDate.currentDate()
            self.dateEdit_Test_2.setDate(self.currentDate)
    
            # 버튼 기능 할당
            self.btn_ok.clicked.connect(self.xlsxDown)
            self.btn_ok.clicked.connect(QCoreApplication.instance().quit)
    
        def xlsxDown(self) :
            # 시작일, 종료일 선택
            self.displayDateStart = self.dateEdit_Test.date()
            self.displayDateEnd = self.dateEdit_Test_2.date()
            startDate=self.displayDateStart.toString("yyyy-MM-dd")
            endDate=self.displayDateEnd.toString("yyyy-MM-dd")
    
            # mdb를 xlsx로 변환
            MDB = os.path.abspath('./생산정보DB.mdb')
            DRV = '{Microsoft Access Driver (*.mdb, *.accdb)}'
            PWD = ''
    
            # DB연결 설정
            con = pyodbc.connect('DRIVER={};DBQ={};PWD={}'.format(DRV,MDB,PWD))
            cur = con.cursor()
    
            # 시작일에서 종료일까지 조회 쿼리
            SQL = "SELECT * FROM 작업실적DB WHERE 작업일자 between #"+startDate+"# and #"+endDate+"#";
    
            # 윈도우 바탕화면 경로에 xlsx 저장
            df = pd.read_sql(SQL, con)
            writer = pd.ExcelWriter(os.path.abspath('./result.xlsx'), engine='xlsxwriter') # xlsx 파일 저장 위치 절대 경로 설정
            df.to_excel(writer, sheet_name='Sheet1')
    
            # xlsx 파일 열 서식 지정
            workbook  = writer.book
            worksheet = writer.sheets['Sheet1']
            format1 = workbook.add_format({'num_format': 'yyyy-mm-dd'})
            format2 = workbook.add_format({'num_format': '#,##0.00'})
            worksheet.set_column('C:C', 19, format1)
            worksheet.set_column('G:G', 15)
            worksheet.set_column('K:K', 10, format2)
            worksheet.set_column('A:A', 0)
            worksheet.set_column('B:B', 0)
            worksheet.set_column('N:N', 0)
            worksheet.set_column('O:O', 0)
            worksheet.set_column('R:R', 0)
            worksheet.set_column('S:S', 0)
            worksheet.set_column('T:T', 0)
            worksheet.set_column('U:U', 0)
            worksheet.set_column('V:V', 0)
            writer.save()
        
    if __name__ == "__main__" :
        app = QApplication(sys.argv)
        myWindow = WindowClass()
        myWindow.show()
        app.exec_()
    ​

    첨부 파일

    dateEdit.ui
    0.00MB

     

    728x90
    반응형
    댓글