6

我正在尝试在使用 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()

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

4

4 回答 4

7

我也有这个问题。尝试在 Excel 中保存更改时出现“共享冲突”。解决writer.handles = None后添加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
于 2021-03-30T10:32:05.277 回答
5

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

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

正如 Exho 评论的那样,关键是您使用以下表格:

with pd.ExcelWriter(outpath, engine="xlsxwriter") as writer:
    # do stuff here

你不使用writer.save()or writer.close(),它们是同一个调用的同义词。而是保存并关闭文件,并在您离开with范围后立即释放句柄。

于 2021-07-09T11:43:32.370 回答
4

您的代码看起来太复杂了,您无需与编写器打交道,df.to_excel()您可以为您完成。只需使用更简单的代码:如docsdf1.to_excel(outpath, sheet_name="Results", engine='xlsxwriter')中所建议的那样。

于 2019-06-25T10:31:47.637 回答
0

我面临着类似的情况。alec_djinn 给出的建议不适用于多张纸,因为我正在工作。所以我只是忽略了 .close() 方法,它工作得很好。

于 2021-01-26T13:01:01.210 回答