【问题标题】:Python 3 pywin32 saveAs funtion with tkinter GUI saveas dialog path as input使用 tkinter GUI saveas 对话框路径作为输入的 Python 3 pywin32 saveAs 功能
【发布时间】:2018-02-13 04:00:47
【问题描述】:

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

pywintypes.com_error: (-2147352567, '发生异常。', (0, 'Microsoft Excel', "Microsoft Excel 无法访问该文件 'C:\//用户/user1/Desktop/610D1100'。有几种可能 原因:\n\n• 文件名或路径不存在。\n• 文件在 正被另一个程序使用。\n• 您尝试保存的工作簿 与当前打开的工作簿同名。", '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()

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

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

即。 wb.SaveAs(#path and filename from user input in GUI)

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

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

【问题讨论】:

    标签: python-3.x tkinter pywin32 win32com save-as


    【解决方案1】:

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

    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

    【讨论】:

    • 谢谢你,我花了 2 个小时排除故障,这就是答案。
    猜你喜欢
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多