簡體   English   中英

如何使用openpyxl將qtablewidget數據保存到excel文件中

[英]how to save qtablewidget data into excel file using openpyxl

我有一個包含數據的 qtablewidet,當用戶單擊導出按鈕時,將出現一個對話框,要求將文件名另存為 excel,我如何使用 openpyxl 做到這一點?

這是我的代碼

self.exportbtn.clicked.connect(self.export)

    def export(self):
        try:
            filename = QtWidgets.QFileDialog.getSaveFileName(self, 'Save file', '','Excel files(*.xlsx)')
            wb = Workbook()
            sheet = wb.active
            for column in range(self.tableWidget.columnCount()):
                for row in range(self.tableWidget.rowCount()):
                    try:
                        text = str(self.tableWidget.item(row, column).text())
                        sheet.write(row, column, text)
                        wb.save(filename)
                    except Exception as e:
                        print("Error Writing file.")
        except Exception as e:
            print("Error Saving file.")

當我嘗試從對話框中單擊保存時,現在的 output 就是這個

在此處輸入圖像描述

我如何使用 openpyxl 將包括標題的整個數據從 qtablewidget 保存到 excel 文件?

更新:我現在編輯了我的代碼並且我能夠創建文件但是來自 qtablewidget 的數據仍然沒有寫入 excel 文件

def export(self):
        filename, filter = QtWidgets.QFileDialog.getSaveFileName(self, 'Save file', '','Excel files (*.xlsx)')
        wb = Workbook()
        sheet = wb.active
        if not filename:
            for column in range(self.tableWidget.columnCount()):
                for row in range(self.tableWidget.rowCount()):
                    try:
                        text = str(self.tableWidget.item(row, column).text())
                        sheet.write(row, column, text)                    
                    except AttributeError:
                        pass
        wb.save(filename)

我嘗試從 qtablewidget 打印數據,它顯示,它只是沒有保存在 excel 文件中,是否還缺少一些東西?

因此,您的行 wb.save(filename) 在您的 for 循環中,因此每個循環都保存了相同的文件名。

將該行移到外部縮進的 for 循環之后,因此只保存一次。

另外,請確保文件名不存在,否則您可能會看到彈出對話框“您確定嗎?” 然后你需要強制保存它。

QFileDialog 的幾乎所有 static 方法( getExistingDirectory()getExistingDirectoryUrl()除外)都以(file(s), filter)的形式返回一個元組。

對於getOpenFileNames() (注意復數),第一個 object 是指示所選文件的字符串列表,在其他情況下,它是字符串形式的文件路徑或 URL。

請注意,如果對話框被取消,則文件字符串(或列表)為空,因此您應該在繼續寫入文件之前檢查一下:

    filename, filter = QtWidgets.QFileDialog.getSaveFileName(
        self, 'Save file', '','Excel files(*.xlsx)')
    if not filename:
        return
    # ...

此外,您不應嘗試在 for 循環的每個循環中保存文件。

雖然 Qt 中 99% 的函數在 PyQt 中的行為方式相同,但這並不總是正確的,尤其是對於 C++ 使用引用變量的情況。 每當您不確定 function 或從中獲得意外行為時,您可以查看PyQt 文檔(返回的類型在 ZC1C425268E68385D1AB5074C17 的末尾指定或只調用help(class.function)之后的定義)。 help(class.function)在 python 控制台中。 一個更簡單的解決方案是只print返回的值,您會自己看到。

def imag_Export_Report(self):  
    self.cur.execute('''SELECT name, phone, image FROM photo''')
    rows = self.cur.fetchall()
    excel_file = QtWidgets.QFileDialog.getSaveFileName(self, "save file",'./','Excel Files (*.xlsx)')
    workbook = xlsxwriter.Workbook(excel_file[0])
    sheet1 = workbook.add_worksheet()
    sheet1.write(0, 0, 'name ') 
    sheet1.write(0, 1, ' phone')
    sheet1.write(0, 2, 'image ')

    row_number = 1  
    for row in rows:
        column_number = 0  
        for item in row:
            sheet1.write(row_number, column_number, str(item))
            column_number += 1
        row_number += 1
    workbook.close()
    self.con.commit()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM