[英]how to save the data entered in the textbox in excel using openpyxl
[英]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.