Python 3 pywin32 saveAs 函数以 tkinter GUI saveas 对话框路径作为输入

Python 3 pywin32 saveAs funtion with tkinter GUI saveas dialog path as input

我完全是编码初学者,我在弄清楚如何使用 tkinter asksavefileasname diaglog 作为 win32 保存打开的 excel 文件的路径时遇到问题。我继续收到;

pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, 'Microsoft Excel', "Microsoft Excel cannot access the file 'C:\//Users/user1/Desktop/610D1100'. There are several possible reasons:\n\n• The file name or path does not exist.\n• The file is being used by another program.\n• The workbook you are trying to save has the same name as a currently open workbook.", 'xlmain11.chm', 0, -2146827284)

相关代码如下:

from  tkinter import filedialog
import win32com.client as win32

excel = win32.gencache.EnsureDispatch('Excel.Application')
if selection == 'Other':
    wb = excel.Workbooks.Open('C:\Users\user1\Desktop\template1.xlsx')

saveFile = filedialog.asksaveasfilename(filetypes=(("Excel files", "*.xlsx"),
                                    ("All files", "*.*") ))
print (saveFile) #This gives the correct file path

wb.SaveAs(saveFile)

excel.Application.Quit()

如果我手动输入保存文件的路径,它可以正常工作。

我正在尝试从 saveas 对话框中获取用户输入作为保存文件的路径。

即。 wb.SaveAs(#用户在 GUI 中输入的路径和文件名)

我没有保存为已经打开的文件名。使用 print(saveFile) 时打印出正确的路径 唯一未知的是在错误消息的路径中添加了 \。我不确定这是否是将 \ 添加到路径中的 tkinter 问题,或者这是否无关紧要。

编辑** 我不认为这是一个 tkinter 问题,因为它适用于打印,它在错误消息中给了我一个不同的文件名,这让我相信这是一个与 win32 相关的问题。

错误是我的变量返回时使用 / 而不是 \ 作为路径分隔符。

wb.SaveAs 只接受文件路径中的 \

解决方案是按照建议使用 os.path here

有关详细信息,请查看 documentation

saveFile = filedialog.asksaveasfilename(filetypes=(("Excel files", "*.xlsx"),("All files", "*.*") ))
saveFileNoSlash = os.path.normpath(saveFile)

wb.SaveAs(saveFileNoSlash)

excel.Application.Quit()

有关不同斜杠和将反斜杠替换为正斜杠的问题的其他信息在此 answer