python win32 COM закрытие книги Excel - PullRequest
7 голосов
/ 14 июня 2011

Я открываю несколько разных книг (в формате Excel xlsx) в COM и связываюсь с ними. По мере выполнения программы я хочу закрыть одну конкретную рабочую книгу, но остальная часть остается открытой.

Как закрыть ОДНУ рабочую книгу? (вместо всего приложения Excel)

xl = Dispatch("Excel.Application")
xl.Visible = False
try:
    output = xl.Workbooks.Open(workbookName)
    output2 = xl.Workbooks.Open(workbook2Name)
except com_error:
    print "you screwed up blahblahblah"
    exit()

#work on some stuff
#close output but keep output2 open

Ответы [ 2 ]

19 голосов
/ 14 июня 2011

COM-объект Workbook имеет метод Close () . По сути, это должно быть что-то вроде:

xl = Dispatch('Excel.Application')
wb = xl.Workbooks.Open('New Workbook.xlsx')
# do some stuff
wb.Close(True) # save the workbook

Выше приведен лишь скелет. Вот код, который работает на моей машине с Office 2010:

from win32com.client import Dispatch
xl = Dispatch('Excel.Application')
wb = xl.Workbooks.Add()
ws = wb.Worksheets.Add()
cell = ws.Cells(1)
cell.Value = 'Some text'
wb.Close(True, r'C:\Path\to\folder\Test.xlsx')

Конечно, это создает новый файл xlsx. Но тогда я могу успешно открыть и изменить файл в том же сеансе следующим образом:

wb = xl.Workbooks.Open(r'C:\Path\to\folder\Test.xlsx')
ws = wb.Worksheets(1)
cell = ws.Cells(2)
cell.Value = 'Some more text'
wb.Close(True)

Не знаю, поможет ли что-нибудь из этого ...

3 голосов
/ 14 июня 2011

Вы также можете попробовать использовать следующий код:

excel = Dispatch("Excel.Application")
excel.Visible = False
workbook = excel.Workbooks.Open(fileName)

# with saving
excel.DisplayAlerts = False
if saveAs:
    excel.ActiveWorkbook.SaveAs(fullFileNameToSave)
else:
    excel.ActiveWorkbook.Save()
excel.Quit()

#without saving

map(lambda book: book.Close(False), excel.Workbooks)
excel.Quit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...