当我执行Xlwings函数时,我可以保存并关闭工作簿。但我无法再关闭Excel 2016。这是已知问题吗?如何修复此问题?
w8f9ii691#
下面是我如何让它工作的:
import xlwings as xw wbPath = [WorkbookPath] wb = xw.Book(wbPath) app = xw.apps.active wb.save(wbPath) #wb.close() app.quit()
请注意,我注解掉了wb.close()行。您可以跳过这一步,而是设置app = active Excel示例,保存工作簿,然后退出应用程序。
wb.close()
bprjcwpo2#
更新
当您要关闭Excel和关联的工作簿时,可以使用wb.app.quit()。假定wb是您的工作簿。请记住,如果在使用wb.app.quit()之前使用wb.close(),则wb.app.quit()不起作用。下面是一个示例:
wb.app.quit()
wb
import xlwings as xw path = r"test.xlsx" wb = xw.Book(path) wb.app.quit()
但也要考虑使用with xw.App() as app打开和关闭工作簿(从版本0. 24. 3开始),我只能推荐它:
with xw.App() as app
import xlwings as xw with xw.App() as app: wb = xw.Book("test.xlsx") # Do some stuff e.g. wb.sheets[0]["A1"].value = 12345 wb.save("test.xlsx") wb.close()
with语句可确保正确获取和释放资源。with语句可防止在正确关闭Excel之前发生错误时,Excel仍处于打开状态并可能在后台留下隐藏的Excel进程的问题(因为xw.App(visible=False),如果使用的话)。with语句还有一个优点,就是您不再需要app.quit(),因为Excel在with块的末尾会关闭,但是在with块末尾的wb.close()是可用的(但不是必须的)-它实现了下一次你打开Excel时,Excel不会显示Excel已恢复您可能要保留的数据的消息(如此处所述)。顺便说一句,我遇到过app.quit()不起作用的情况,在这种情况下我用app.kill()代替。
with
xw.App(visible=False)
app.quit()
app.kill()
093gszye3#
在mouwsy的回答的基础上,我现在有了这个上下文管理器:
class XwApp(xw.App): def __enter__(self, *args, **kwargs): return super(*args, **kwargs) def __exit__(self, *args): for book in self.books: try: book.close() except: pass self.kill()
我是这样用的
with XwApp(visible=False) as app: app.books.add() # or app.books.open('file.xlsx') # ...
到目前为止,这似乎是相当干净的退出。(但预先打开的Excel窗口总是会把事情搞砸。)
nuypyhwy4#
我知道这是旧的,但我无法找到一个有效的答案,并找出了一个解决方案。我能够通过访问xlwings中的API属性关闭Excel的示例。
xl = xw.apps.active.api xl.Quit()
xlwings只是pywin32的一个花哨的 Package 器,你可以通过实现API属性直接访问pywin32的函数。
4条答案
按热度按时间w8f9ii691#
下面是我如何让它工作的:
请注意,我注解掉了
wb.close()
行。您可以跳过这一步,而是设置app = active Excel示例,保存工作簿,然后退出应用程序。bprjcwpo2#
更新
当您要关闭Excel和关联的工作簿时,可以使用
wb.app.quit()
。假定wb
是您的工作簿。请记住,如果在使用wb.app.quit()
之前使用wb.close()
,则wb.app.quit()
不起作用。下面是一个示例:但也要考虑使用
with xw.App() as app
打开和关闭工作簿(从版本0. 24. 3开始),我只能推荐它:with
语句可确保正确获取和释放资源。with
语句可防止在正确关闭Excel之前发生错误时,Excel仍处于打开状态并可能在后台留下隐藏的Excel进程的问题(因为xw.App(visible=False)
,如果使用的话)。with
语句还有一个优点,就是您不再需要app.quit()
,因为Excel在with块的末尾会关闭,但是在with块末尾的wb.close()
是可用的(但不是必须的)-它实现了下一次你打开Excel时,Excel不会显示Excel已恢复您可能要保留的数据的消息(如此处所述)。顺便说一句,我遇到过
app.quit()
不起作用的情况,在这种情况下我用app.kill()
代替。093gszye3#
在mouwsy的回答的基础上,我现在有了这个上下文管理器:
我是这样用的
到目前为止,这似乎是相当干净的退出。(但预先打开的Excel窗口总是会把事情搞砸。)
nuypyhwy4#
我知道这是旧的,但我无法找到一个有效的答案,并找出了一个解决方案。我能够通过访问xlwings中的API属性关闭Excel的示例。
xlwings只是pywin32的一个花哨的 Package 器,你可以通过实现API属性直接访问pywin32的函数。