Я не могу закрыть Excel 2016 после выполнения функции xlwings

когда я выполняю функцию Xlwings, я могу сохранить и закрыть книгу. Но я больше не могу закрыть Excel 2016. Это известная проблема? Как я могу это исправить?


person user2910705    schedule 11.12.2016    source источник


Ответы (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, сохранить книгу, а затем закрыть приложение.

person EliSquared    schedule 08.05.2017

У меня была ситуация, когда app.quit() не работал. В этом случае вместо этого я использовал app.kill().

person mouwsy    schedule 24.02.2021
comment
С xw.App(visible=False) xlwings создает фоновый процесс (в моем диспетчере задач как C:\Program Files\Microsoft Office\Root\Office16\EXCEL.EXE /automation -Embedding). Это не всегда проходит с 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 всегда могут все испортить.)

person voracity    schedule 02.06.2021
comment
Это связано с: stackoverflow.com/questions/65189330/ - person mouwsy; 03.06.2021

Я знаю, что это старо, но я не смог найти ответ, который сработал, и нашел решение. Мне удалось закрыть экземпляр Excel, обратившись к свойству API в xlwings.

xl = xw.apps.active.api
xl.Quit()

xlwings — это просто причудливая оболочка вокруг pywin32, вы можете напрямую обращаться к функциям pywin32, реализуя свойство API.

person Tyler Anderson    schedule 15.06.2021