如何让xlwings等待保存完成后再关闭Excel文件
解决xlwings中Excel保存未完成就被关闭的问题
在使用xlwings编辑Excel文件时,遇到特定文件的问题:编辑完成执行保存并关闭工作簿的命令后,文件在保存完成前就被关闭了。尝试用time.sleep(2)解决,但该方法低效且不灵活,多次出现即使设置等待仍提前关闭的情况,不想增加等待时长,希望实现等待保存完成后再关闭文件的代码。
已查找多个网站的解决方案,现有方案多围绕Python等待计算完成以获取值,而非等待保存完成再关闭文件。原始代码结构如下:
import xlwings as xw import time app = xw.App() excel = xw.Book("file path") excel_sheet = excel.sheets("sheet name") # 示例修改操作 excel_sheet.range("A1").value = 123 excel.save() time.sleep(2) excel.close() app.quit
更新:尝试使用上下文管理器,但未解决问题,代码如下:
import xlwings as xw import time app = xw.App() with xw.Book("file path") as excel: excel_sheet = excel.sheets("sheet name") # 示例修改操作 excel_sheet.range("A1").value = 123 excel.save() app.quit
解决方案
核心思路是利用Excel原生的Saved属性判断保存状态,循环检查该属性直到确认保存完成,同时调用DoEvents()让Excel处理后台保存事件,避免假死。
普通版本代码
import xlwings as xw app = xw.App() excel = xw.Book("file path") excel_sheet = excel.sheets("sheet name") # 执行编辑操作 excel_sheet.range("A1").value = 123 # 触发保存 excel.save() # 等待保存完成:循环检查Saved属性,直到保存完成 while not excel.saved: app.api.DoEvents() # 让Excel处理后台事件,确保保存流程推进 # 保存完成后关闭工作簿和应用 excel.close() app.quit()
上下文管理器版本代码
import xlwings as xw app = xw.App() with xw.Book("file path") as excel: excel_sheet = excel.sheets("sheet name") excel_sheet.range("A1").value = 123 excel.save() # 等待保存完成 while not excel.saved: app.api.DoEvents() app.quit()
说明
excel.saved:Excel对象的原生属性,文件保存完成后会返回True,未完成时返回Falseapp.api.DoEvents():让Excel处理后台的保存事件,避免Python循环占用资源导致Excel无法推进保存流程,防止假死
内容的提问来源于stack exchange,提问作者joao277
相关产品推荐
相关产品推荐

