繁体   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