【问题标题】:Pandas / xlsxwriter writer.close() does not completely close the excel filePandas / xlsxwriter writer.close() 没有完全关闭excel文件
【发布时间】:2019-11-07 02:47:45
【问题描述】:

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

【问题讨论】:

  • 您可以发布异常和回溯吗? span>
  • 正如我在帖子中所说,这是一条 excel 错误消息:“由于共享冲突,您的更改无法保存到“文件名”。尝试保存到其他文件'
  • documentation of pandas没有提到使用保存和关闭,如果你不使用它们怎么办?你确定你需要Writer吗?你不能直接通过outpah吗?
  • 您应该使用上下文管理器而不是显式@ 987654323和close()with pd.ExcelWriter(outpath, engine="xlsxwriter") as writer:

标签: python excel pandas xlsxwriter sharing-violation


【解决方案1】:

我也有这个问题。 尝试在 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

【讨论】:

  • 命令writer.handles = None 给我错误:AttributeError: 'NoneType' object has no attribute 'handle' 尽管作者在其他方面工作。共享冲突持续存在。想法?
  • 当您尝试设置handles 时,该错误表明writer 为空。
【解决方案2】:

我也遇到过这个。由于“共享冲突”,我无法将文件保存在 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 范围后立即保存并关闭文件并释放句柄。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-19
        • 2017-03-30
        • 2015-06-09
        • 2016-01-04
        • 2014-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多