Python ошибка: xlsxwriter.exceptions.FileCreateError: [Errno 2] Нет такого файла или каталога: '' - PullRequest
2 голосов
/ 12 марта 2020

Что я пытаюсь сделать:

Я пытаюсь сохранить файл с помощью filedialog. Часть сохранения работает хорошо, но если я нажимаю кнопку отмены в диалоговом окне, выбирая не сохранять, я получаю эту ошибку. Как можно устранить эту ошибку?

Я получаю ошибку:

Exception in Tkinter callback

FileNotFoundError: [Errno 2] No such file or directory: ''

During handling of the above exception, another exception occurred:


xlsxwriter.exceptions.FileCreateError: [Errno 2] No such file or directory: ''

Ниже приведен мой код:

import xlsxwriter
import tkinter as tk
import tkinter.ttk as ttk
from tkinter import filedialog

def save():
    filename = filedialog.asksaveasfilename(filetypes=[("Excel files", ".xlsx .xls")],defaultextension='.xlsx')
    workbook = xlsxwriter.Workbook(filename)
    worksheet = workbook.add_worksheet()
    worksheet.write('A1', 'Common Information') 
    worksheet.write('A2', 'Circumference of Tank')
    worksheet.write('C2', 'Height of Tank')
    worksheet.write('A3', 'Minimum Thickness of Tank')
    worksheet.write('C3', 'Maximum Thickness of Tank')   

    workbook.close()  

window = tk.Tk()
window.configure(background='white')

ws = window.winfo_screenwidth()
hs = window.winfo_screenheight()
w = 700 # width for the Tk root
h = 585  # height for the Tk root
x = (ws / 2) - (w / 2)
y = (hs / 2) - (h / 2)

window.geometry('%dx%d+%d+%d' % (w, h, x, y))   

canvas = tk.Canvas(window,bg="white",width=700, height=585, highlightthickness=0)
canvas.pack()


save1 = ttk.Button(canvas, text='Save', command= lambda: save())
canvas.create_window(15, 15, window=save1, anchor=tk.NW)


window.resizable(False, False)
window.mainloop()

1 Ответ

4 голосов
/ 12 марта 2020

Ваша функция save будет вызываться после нажатия кнопки.

filename = filedialog.asksaveasfilename(filetypes=[("Excel files", ".xlsx .xls")],defaultextension='.xlsx')
....

Поскольку при прекращении выбора пути имя файла будет (это тип str, но его длина == 0). И workbook = xlsxwriter.Workbook(filename) вызовет исключение.

Поэтому перед сохранением файла xlsx следует использовать оператор if.

И функция save() должна быть:

def save():
    filename = filedialog.asksaveasfilename(filetypes=[("Excel files", ".xlsx .xls")],defaultextension='.xlsx')
    if filename:
        workbook = xlsxwriter.Workbook(filename)
        worksheet = workbook.add_worksheet()
        worksheet.write('A1', 'Common Information')
        worksheet.write('A2', 'Circumference of Tank')
        worksheet.write('C2', 'Height of Tank')
        worksheet.write('A3', 'Minimum Thickness of Tank')
        worksheet.write('C3', 'Maximum Thickness of Tank')

        workbook.close()
...