когда я выполняю функцию Xlwings, я могу сохранить и закрыть книгу. Но я больше не могу закрыть Excel 2016. Это известная проблема? Как я могу это исправить?
Я не могу закрыть Excel 2016 после выполнения функции xlwings
Ответы (4)
Вот как я заставил это работать:
import xlwings as xw
wbPath = [WorkbookPath]
wb = xw.Book(wbPath)
app = xw.apps.active
wb.save(wbPath)
#wb.close()
app.quit()
Обратите внимание, что я закомментировал строку wb.close()
. Вы можете пропустить этот шаг и вместо этого установить приложение = активный экземпляр Excel, сохранить книгу, а затем закрыть приложение.
У меня была ситуация, когда app.quit()
не работал. В этом случае вместо этого я использовал app.kill()
.
app.quit()
, но, кажется, пока с app.kill()
.
- person voracity; 02.06.2021
Просто чтобы опираться на ответ мышонка, теперь у меня есть этот менеджер контекста:
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 всегда могут все испортить.)
Я знаю, что это старо, но я не смог найти ответ, который сработал, и нашел решение. Мне удалось закрыть экземпляр Excel, обратившись к свойству API в xlwings.
xl = xw.apps.active.api
xl.Quit()
xlwings — это просто причудливая оболочка вокруг pywin32, вы можете напрямую обращаться к функциям pywin32, реализуя свойство API.