Pandas / xlsxwriter writer.close() 没有完全关闭 excel 文件

Nic*_*lle 5 python excel pandas xlsxwriter sharing-violation

在使用 python 脚本创建一个 excel 文件后,我试图手动修改它。不幸的是,如果脚本仍在运行,则在尝试使用相同名称保存时会出现共享文件冲突错误消息。

一切都在代码中顺利运行。文件被创建、填充和保存。我可以打开它并对其进行处理,但如果脚本仍在运行,则不能以相同的名称覆盖它。

outpath = filedialog.asksaveasfile(
    mode="wb",
    filetype=[("Excel", ("*.xls", "*.xlsx"))],
    defaultextension=".xlsx",
)
writer = pd.ExcelWriter(outpath, engine="xlsxwriter")
df1.to_excel(writer, sheet_name="Results")
writer.save()
writer.close()
Run Code Online (Sandbox Code Playgroud)

我希望 python 完全关闭 excel 文件并让我在脚本仍在运行时覆盖它

小智 12

我也遇到了这个。由于“共享冲突”,我无法在 Excel 中保存该文件,因为 python.exe 仍然拥有该文件的句柄。

df.to_excel()如果您只想保存 Excel 文件,则接受的答案是正确的。但如果您想做更多事情,例如首先向 Excel 文件添加格式,则必须使用pd.ExcelWriter().

但正如 Exho 评论的那样,关键是您使用以下形式:

with pd.ExcelWriter(outpath, engine="xlsxwriter") as writer:
    # do stuff here
Run Code Online (Sandbox Code Playgroud)

您不使用writer.save()or writer.close(),无论如何它们都是同一调用的同义词。相反,一旦您离开范围,文件就会被保存并关闭,并且句柄就会被释放with


CFr*_*tas 5

I also had this issue. When trying to save changes in Excel I got "Sharing violation". Solved it adding writer.handles = None after writer.close().

writer = pd.ExcelWriter(workPath+'file.xlsx', engine='xlsxwriter')
# Add all your sheets and formatting here
...
# Save and release handle
writer.close()
writer.handles = None
Run Code Online (Sandbox Code Playgroud)


ale*_*inn 3

你的代码看起来太复杂了,你不需要自己和作者打交道,他们df.to_excel()可以帮你做。只需使用更简单的代码:df1.to_excel(outpath, sheet_name="Results", engine='xlsxwriter')按照文档中的建议。