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

j2cgzkjk  于 2023-04-28  发布在  其他
关注(0)|答案(5)|浏览(426)

我试图在用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文件,并让我在脚本仍在运行时覆盖它

qkf9rpyu

qkf9rpyu1#

我也有这个问题。当试图在Excel中保存更改时,我得到了“共享冲突”。解决了在writer.close()后添加writer.handles = None

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

hjzp0vay2#

我也遇到了这个问题。我无法在Excel中保存文件,因为“共享冲突”,因为python.exe仍然有一个文件句柄。
如果你想做的只是保存excel文件,那么使用df.to_excel()是正确的。但是如果你想做更多的事情,比如首先向excel文件添加格式,你就必须使用pd.ExcelWriter()
关键是,正如Exho评论的那样,您使用以下形式:

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

你不用writer.save()writer.close(),它们是同一个调用的同义词。相反,一旦你离开with作用域,文件就会被保存并关闭,句柄也会被释放。

b1uwtaje

b1uwtaje3#

你的代码看起来太复杂了,你不需要自己处理编写器,df.to_excel()可以为你做。只要使用更简单的代码:df1.to_excel(outpath, sheet_name="Results", engine='xlsxwriter'),如docs所示。

rsaldnfx

rsaldnfx4#

我也遇到了类似的情况。alec_djinn给出的建议不适用于多个工作表,因为我正在工作。所以我忽略了.close()方法,它工作得很好。

cgvd09ve

cgvd09ve5#

对于writer.handles = None错误,AttributeError:“NoneType”对象没有属性“handle”
我通过这样写来绕过它:

try:
    writer.handles = None
except:
    ''

相关问题