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
我完全是编码初学者,我在弄清楚如何使用 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