pythonwin32 COMclosuresexcel工作簿

我在COM中打开了几个不同的工作簿(excel xlsx格式),并混淆了它们。 随着程序的进展,我希望closures一个特定的工作簿,但保持rest。

如何closures一个工作簿? (而不是整个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 

工作簿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') 

当然,这会创build一个新的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) 

不知道是否有任何帮助…

您也可以尝试使用以下代码:

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