Buy Me a Coffee? Your support is much appreciated!
PayPal Me: https://www.paypal.me/jiejenn/5
Venmo: @Jie-Jenn
Source Code:
import sys
from PyQt6.QtWidgets import QApplication, QWidget, QTableWidget, QTableWidgetItem, QPushButton, \
QHBoxLayout, QVBoxLayout
from PyQt6.QtCore import Qt
import win32com.client as win32
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 exportToExcel(self):
xlApp = win32.Dispatch('Excel.Application')
xlApp.Visible = True
# create a new excel workbook
wb = xlApp.Workbooks.Add()
# create a new excel worksheet
ws = wb.worksheets.add
ws.name = 'Excel Dummy Data'
rows = []
columnHeaders = []
# retrieve columns label
for j in range(self.table.model().columnCount()):
columnHeaders.append(self.table.horizontalHeaderItem(j).text())
# retrieve table content
for row in range(self.table.rowCount()):
record = []
for col in range(self.table.columnCount()):
record.append(self.table.item(row, col).text())
rows.append(record)
# insert table content to Excel
ws.Range(
ws.cells(2, 1),
ws.cells(len(rows)+1, len(columnHeaders))
).value = rows
# insert column labels To Excel
ws.Range(
ws.cells(1, 1),
ws.cells(1, len(columnHeaders))
).value = columnHeaders
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)):
itm = QTableWidgetItem('Cell {0}{1}'.format(self.headerLabels[col], row + 1))
self.table.setItem(row, col, itm)
self.table.resizeColumnsToContents()
self.table.resizeRowsToContents()
if __name__ == '__main__':
# don't auto scale when drag app to a different monitor.
# QGuiApplication.setHighDpiScaleFactorRoundingPolicy(Qt.HighDpiScaleFactorRoundingPolicy.PassThrough)
excel_file_path = 'data.xlsx'
worksheet_name = 'Sales'
app = QApplication(sys.argv)
app.setStyleSheet('''
QWidget {
font-size: 17px;
}
''')
myApp = MyApp()
myApp.show()
try:
sys.exit(app.exec())
except SystemExit:
print('Closing Window...')
