web-dev-qa-db-ja.com

python win32COMがExcelワークブックを閉じる

COMでいくつかの異なるワークブック(Excel xlsx形式)を開いて、それらをいじります。プログラムが進むにつれて、特定のワークブックを1つ閉じたいが、残りは開いたままにしておきたい。

1つのワークブックを閉じるにはどうすればよいですか? (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
9
Razor Storm

Workbook COMオブジェクト Close()メソッドがあります 。基本的に、次のようになります。

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

上記は単なるスケルトンであり、Office2010に対して私のマシンで機能するコードを次に示します。

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)

そのいずれかが役立つかどうかわからない...

25
ig0774

次のコードを使用することもできます。

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