首页 > 解决方案 > 如何将我的所有 Treeview 数据以及特定数据保存在不同的 Excel 文件中?

问题描述

我正在尝试将树视图的数据保存在不同的 Excel 文件中,实际上我的代码正在工作,每次我想保存它时都在同一个 Excel 文件中更新我的数据,所以我想要保存在不同的文件中。我的意思是,当我按下保存按钮时,它会显示“我想将其保存在计算机中的哪个位置”以及“给该文件起什么名称”,然后只显示一条消息“已成功保存”或“您没有选择任何数据”为了节省”。这是我将数据保存在同一文件中的代码:

def save():
    cols = ['ID CARD','NAME','SURNAME', 'DATE']
    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() 

标签: pythonpython-3.xexceltkintertreeview

解决方案


这样做并不难,你必须使用filedialogfrom tkinter

from tkinter import filedialog, messagebox

然后替换excel_name为:

excel_name = filedialog.asksaveasfilename(title='Save location',defaultextension=[('Excel','*.xlsx')],filetypes=[('Excel','*.xlsx')]) 

这应该会弹出一个文件对话框,询问您保存文件的位置,然后逻辑将文件保存在返回的位置。您可以使用 使这一点变得更好messagebox,例如:

excel_name = filedialog.asksaveasfilename(title='Save location',defaultextension=[('Excel','*.xlsx')],filetypes=[('Excel','*.xlsx')]) 

if not excel_name or excel_name == '/': # If the user closes the dialog without choosing location
    messagebox.showerror('Error','Choose a location to save')
    return # Stop the function 

虽然我不确定是否excel_name'''/'每次用户关闭时,使用print(excel_name)并关闭框,然后if使用打印出来的任何内容进行制作。

更多关于使用 tkinter 的 filedialog:Tkinter Dialogs — Python 3.9.2 文档


推荐阅读