【问题标题】:How to save a Treeview data as excel file in Tkinter?如何在 Tkinter 中将 Treeview 数据保存为 excel 文件?
【发布时间】:2025-12-15 04:25:02
【问题描述】:

我的Treeview 表单中有一些数据绑定到我的SQLite 数据库,我想知道是否有办法将我的Treeview 的数据作为excel 文件保存在我的计算机中。

mytree = ttk.Treeview(frame_busqueda, height=19, column=('column1', 'column2', 'column3', 'column4', 'column5', 'column6'), show='headings', style="Custom.Treeview")
            mytree.pack()
style = ttk.Style()

style.configure("Custom.Treeview.Heading",
                             foreground="green", relief="flat", font='arial 10 bold')
style.map("Custom.Treeview.Heading", relief=[('active', 'groove'), ('pressed', 'sunken')])


mytree.heading("#1", text="ID CARD")
mytree.column("#1", minwidth=0, width=103, stretch=NO)
mytree.heading("#2", text="NAME")
mytree.column("#2", minwidth=0, width=200, stretch=NO)
mytree.heading("#3", text="SURNAME") 

def savetreeview():
     with open("new.csv", "w", newline='') as myfile:
          csvwriter = csv.writer(myfile, delimiter=',')

          for row_id in mytree.get_children():
              row = mytree.item(row_id)['values']
              csvwriter.writerow(row)
              print(row)

我试图使用 csv 来尝试获取行,它显示了我所有的 Treeview 数据作为输出,但实际上我想要将我的 Treeview 的数据保存为我的电脑。谢谢

【问题讨论】:

  • csv文件完美吗?随心所欲。
  • @CoolCloud 它仅在我运行程序时将我的 Treeview 值显示为输出,但我想要将所有树视图数据保存为我的计算机中的 excel 文件,我已经阅读过熊猫,但我被卡住了,伙计

标签: python python-3.x excel tkinter treeview


【解决方案1】:

pandas 非常简单,你所要做的就是创建一个 writer 并用它来将 csv 写入 excel,例如:

import pandas as pd

writer = pd.ExcelWriter('nameofexcelfiletocreate.xlsx') # Creates this excel file
df = pd.read_csv('new.csv') # Reads the csv and makes a dataframe

df.to_excel(writer,'sheet1') # Writes the dataframe to excel file
writer.save() # Saves the file

这将创建一个新的 excel 文件,并将您的 csv 转换为 excel。记下您必须安装 openpyxl 才能运行此功能:

pip install openpyxl

所以你的函数应该是这样的:

def call():
    cols = ['ID CARD','NAME','SURNAME'] # Your column headings here
    path = 'read.csv'
    excel_name = 'newfile.xlsx'
    lst = []
    with open(path, "w", newline='') as myfile:
        csvwriter = csv.writer(myfile, delimiter=',')
        for row_id in mytree.get_children():
            row = mytree.item(row_id,'values')
            lst.append(row)
        lst = list(map(list,lst))
        lst.insert(0,cols)
        for row in lst:
            csvwriter.writerow(row)

    writer = pd.ExcelWriter(excel_name)
    df = pd.read_csv(path)
    df.to_excel(writer,'sheetname')
    writer.save()

【讨论】:

  • 在运行该代码之前是否必须创建一个 excel 文件?或者该函数将创建并将其保存为新文件?第二个问题,我是否必须在此处修改 valuesrow = mytree.item(row_id)['values'] 我试图运行它但我得到了错误,还试图用我的树视图列修改“值”也给了我一个错误,或者是因为我需要在我的计算机中有一个带有“newfile.xlsx”和“的文件”工作表名称'?
  • @Paul Nope,它会创建这样一个文件
  • row = mytree.item(row_id)['values'] 将给出每行所有输入的列表,有什么问题?使用新错误更新问题。
  • 这给了我一些错误,一旦我运行我的程序,我的按钮就消失了,但是我的主项目文件 new.csvnewfile 中有两个 excel 文件.xlsx ,new.csv 已将我的树视图数据存储在一个单元格中,但 newfile.xlsx 给了我一个错误“excel 无法打开文件....因为格式或文件扩展名无效”
  • 好的,伙计,我会创建一个新问题
【解决方案2】:
def saveExcel():
    workbook = load_workbook(filename='problem record.xlsx')
    sheet=workbook['Sheet1']
    sheet.delete_rows(idx=2, amount=15)
    for row_id in treeview.get_children():
        row = treeview.item(row_id)['values']
        sheet.append(row)
    workbook.save(filename='problem record.xlsx')

【讨论】:

  • 感谢您的回答。在此基础上,我简化了程序,直接保存到excel。