Окно приложения EXCEL не закрывается на workbook.close () - PullRequest
0 голосов
/ 08 мая 2019

Когда я открываю книгу, используя

wbTest = xlwings.Book('test.xlsm')

, приложение EXCEL открывается и показывает книгу.Но при выполнении

wbTest.close()

рабочая книга закрывается, но окно EXCEL остается открытым, поэтому мне приходится закрывать его вручную, даже если xlwings.apps возвращает пустой список:

EXCEL window still open

Есть ли способ закрыть окно EXCEL, как только закроется последняя книга?

В официальной документации (readthedocs) я не смог ничего найтипока что решаем этот вопрос.

Ответы [ 2 ]

0 голосов
/ 09 мая 2019

Иногда загруженная рабочая книга содержит макросы, которые оставляют приложение в «несохраненном» состоянии, даже если никаких изменений не было сделано.Использование wbTest.app.quit() в этом случае вызовет диалоговое окно сохранения, которое я не хочу видеть.Использование wbTest.app.kill() закроет рабочую книгу (и закроет окно EXCEL), но при повторном открытии EXCEL отобразится диалоговое окно восстановления для уничтоженной книги wbTest, чего я бы хотел избежать.

Так, вот общее решение, которое работает для меня:

import xlwings
import tempfile
import os

# ... some code creating at least one workbook "wbTest"

# check, if there is only one workbook left and we don't want to save it
if len(xlwings.apps) == 1:

    #save the remaining workbook into temporary folder
    wbTest.save(
        os.path.join(
            tempfile.gettempdir(),
            'test.xlsm',
        )
    )

    # close the application
    wbTest.app.quit()

Спасибо за все подсказки.

0 голосов
/ 08 мая 2019

В Windows xlwings в настоящее время требуется книга для связи с Excel. Но вы можете достичь желаемого результата, выйдя из приложения, а не просто закрыв рабочую книгу (сначала вы можете проверить, не открыто ли в этом приложении более одной рабочей книги с помощью len(wbTest.app.books)):

wbTest.app.quit()

Вы можете сначала сохранить рабочую книгу или, в качестве альтернативы, также app.kill().

...