python win32 COM 关闭 Excel 工作簿

14 投票
4 回答
91069 浏览
提问于 2025-04-16 19:30

我在COM中打开了几个不同的工作簿(Excel的xlsx格式),然后对它们进行了一些操作。随着程序的进行,我想关闭一个特定的工作簿,但想保持其他的工作簿仍然打开。

我该怎么关闭一个工作簿呢?(而不是关闭整个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

4 个回答

1

这个函数会关闭任何已经打开的Excel文件。

import os

def closeFile():

    try:
        os.system('TASKKILL /F /IM excel.exe')

    except Exception:
        print("KU")

closeFile()
10

你也可以试试下面的代码:

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()
39

Workbook这个COM对象有一个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)

不知道这些信息有没有帮助……

撰写回答