Как добавить всю таблицу PYQT5 в заданную c часть таблицы Excel - PullRequest
0 голосов
/ 07 февраля 2020

Итак, я создал программу Python, которая позволяет пользователю добавлять данные в таблицу PYQT, используя различные параметры, однако я изо всех сил пытаюсь найти способ экспортировать их в электронную таблицу, в которой я хочу их сохранить. В связи с универсальностью программы, я должен иметь возможность указать начальную ячейку для таблицы, в которую нужно вставить ее. Я был в состоянии добавить таблицу в CSV-файл в предыдущей программе, но я не могу найти нигде, который может помочь с добавлением ее в электронную таблицу Excel.

К сожалению, это было бы легко сделать, если бы я не сделал ' я сначала помещаю его в таблицу PYQT, но мне нужно, чтобы пользователь мог просматривать и редактировать данные перед отправкой их в электронную таблицу.

Я использовал Openpyxl для других взаимодействий с электронными таблицами, и это было действительно хорошо, но я тоже не могу найти способ сделать это.

Буду признателен за любую помощь, и, если я пропустил пост, посвященный этой теме, пожалуйста, дайте мне знать!

from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QWidget, QLineEdit, QVBoxLayout, QTableWidget, QTableWidgetItem
from openpyxl import *
import datetime
import calendar

class Deliver(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(Deliver, self).__init__(parent)
        self.initUI()

    def initUI(self):
        self.table_widget = DTabs(self)
        self.setCentralWidget(self.table_widget)

class DTabs(QWidget):

    def __init__(self, parent=Deliver):
        super(QWidget, self).__init__(parent)
        self.initUI()

        self.linescan = QLineEdit(self)
        self.linescan.move(20, 10)
        self.linescan.resize(160, 30)
        self.linescan.returnPressed.connect(self.handleScan)

        self.subButton = QtWidgets.QPushButton('Submit', self)
        self.subButton.clicked.connect(self.handleSubmit)

        self.layout.addWidget(self.linescan)
        self.layout.addWidget(self.subButton)

    def initUI(self):
        self.createTable()
        self.layout = QVBoxLayout()
        self.layout.addWidget(self.tableWidget)
        self.setLayout(self.layout)
        self.show()

    def createTable(self):
        self.tableWidget = QTableWidget()
        self.tableWidget.setRowCount(0)
        self.tableWidget.setColumnCount(3)
        self.tableWidget.move(0, 0)

    def handleScan(self):

        numRows = self.tableWidget.rowCount()
        self.tableWidget.insertRow(numRows)
        self.tableWidget.setItem(numRows, 0, QTableWidgetItem(self.linescan.text()))
        self.tableWidget.setItem(numRows, 1, QTableWidgetItem(str(1)))
        self.linescan.clear()

    def handleSubmit(self):

        now = datetime.datetime.now()
        month = calendar.month_name[now.month]

        wb = load_workbook("{}.xlsx".format(now.year))
        ws = wb["{} Deliveries".format(month)]

        if ws.cell(row=1, column=1).value == None:
            startcell = ws.cell(row=1, column=1)
        else:
            startcell= ws.cell(row=1, column=ws.max_column+1)

        startcell.value = 'Submitted on:'
        startc = startcell.column
        ws.cell(row=1, column=startc+1).value = now.day
        ws.cell(row=1, column=startc+2).value = now.time()

        pastestartcell = ws.cell(row=2, column=startc)

if __name__ == '__main__':

    import sys
    app = QtWidgets.QApplication(sys.argv)
    deliver = Deliver()
    deliver.show()
    sys.exit(app.exec_())
...