解决xlwings多个pid占用多个excel.exe进程,导致打开生成的Excel一片空白

近来在搞根据yaml格式的文件,由yaml中输入的内容转换为Excel文件,使用xlwings模块,但是发现最后虽然使用app.kill(),但是还是有多个excel.exe进程占用,最初没有发现原因,使用以下方法解决:

......
# 保存文件并关闭
self.wb.save("xxx.xlsx")
self.wb.close()
self.app.kill()
# 手动终止excel进程
os.system("taskkill /f /im EXCEL.EXE")

但是这样会有一个问题,它会终止正在运行的所有excel进程,如果正在编辑的excel没有保存,就会丢失内容。

解决办法:

后面通过打印app.pid发现多出来不能通过app.kill()终止的进程是由于读取yaml时,我单独创建了一个函数,后面在写入excel的函数中调用,会执行类下的__init__方法,这样就新增了一个app进程。
解决办法就是删除读取yaml的函数,直接写在写入excel的函数中,之后正常通过app.kill()结束就可以了。
如下,将下面

class A:
	......
	def read_yaml(self):
		"""
		读取yaml文件
		"""
		with open("xxx.yaml", "r") as f:
			data = f.read()
		return yaml.load(data, Loader=yaml.Loader)

	def write_xls(self):
		"""
		写入excel
		"""
		conent = A().read_yaml()
		...

改为:

class A:
	......
	def write_xls(self):
		"""
		写入excel
		"""
		with open("xxx.yaml", "r") as f:
			data = f.read()
		conent =  yaml.load(data, Loader=yaml.Loader)
	......
......
# 保存文件并关闭
self.wb.save("xxx.xlsx")
self.wb.close()
self.app.kill()

其实解决也简单,只是找到是哪里的问题有点麻烦。。。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值