컴퓨터/Python

python qtablewidget excel out

풍경소리^^ 2022. 5. 19. 18:32

https://www.youtube.com/watch?v=55kQL-42Nzo&t=21s 

qtablewidgetExcel_out.py--------------------

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QTableWidget, QTableWidgetItem, QHeaderView, QHBoxLayout, QVBoxLayout, QPushButton
from PyQt5.QtCore import Qt
import win32com.client as win32
import pandas as pd # pip install pandas
class MyApp(QWidget):
    def __init__(self):
        super().__init__()
        self.window_width, self.window_height = 700, 500
        self.resize(self.window_width, self.window_height)
        layout = QVBoxLayout()
        self.setLayout(layout)
        self.table = QTableWidget()
        layout.addWidget(self.table)
        self.button = QPushButton('&Export To Excel', clicked=self.exportToExcel)
        layout.addWidget(self.button)
        self.loadData()
    def loadData(self):
        self.headerLabels = list("ABCDEFGHIJKLMN")
        maxRows = 10000
        self.table.setRowCount(maxRows)
        self.table.setColumnCount(len(self.headerLabels))
        self.table.setHorizontalHeaderLabels(self.headerLabels)
        # inserting data
        for row in range(maxRows):
            for col in range(len(self.headerLabels)):
                item = QTableWidgetItem('Cell {0}{1}'.format(self.headerLabels[col], row + 1))
                self.table.setItem(row, col, item)
        self.table.resizeColumnsToContents()
        self.table.resizeRowsToContents()
    def exportToExcel(self):
        columnHeaders = []
        # create column header list
        for j in range(self.table.model().columnCount()):
            columnHeaders.append(self.table.horizontalHeaderItem(j).text())
        df = pd.DataFrame(columns=columnHeaders)
        # create dataframe object recordset
        for row in range(self.table.rowCount()):
            # record = []
            for col in range(self.table.columnCount()):
                df.at[row, columnHeaders[col]] = self.table.item(row, col).text()
        df.to_excel('Dummy File XYZ.xlsx', index=False)
        print('Excel file exported')
    def loadExcelData(self, excel_file_dir, worksheet_name):
        df = pd.read_excel(excel_file_dir, worksheet_name)
        if df.size == 0:
            return
        df.fillna('',inplace=True)
        self.table.setRowCount(df.shape[0])
        self.table.setColumnCount(df.shape[1])
        self.table.setHorizontalHeaderLabels(df.columns)
        # returns pandas array object
        for row in df.iterrows():
            values = row[1]
            for col_index, value in enumerate(values):
                if isinstance(value, (float, int)):
                    value = '{0:0,.0f}'.format(value)
                tableItem = QTableWidgetItem(str(value))
                self.table.setItem(row[0], col_index, tableItem)
        # self.table.setColumnWidth(2, 300)
if __name__ == '__main__':
    # don't auto scale when drag app to a different monitor
    # QGuiApplication.setHighDpiScaleFactorRoundingPolicy(Qt.HighDpiScaleFactorRoundingPolicy.passThrough)
    excel_file_path = r"b:\python\vscode\PyQt5_Excel\직원현황.xlsm"
    worksheet_name = "직원현황"
    app = QApplication(sys.argv)
    app.setStyleSheet('''
        QWidget {
            font-size: 17px;
        }
    ''')
    myApp = MyApp()
    myApp.show()
    try:
        sys.exit(app.exec())
    except SystemExit:
        print('Closing Window...')

====================