12

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
4

4 に答える 4

31

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)

それが役立つかどうかはわかりません...

于 2011-06-14T00:57:19.353 に答える
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()
于 2011-06-14T07:02:06.090 に答える
0
def setAutoFilter(self,ws,AmountToMatch):
        amounttopass = f"{AmountToMatch}"
        print("The Amount  of that month is  ::",amounttopass)
        ws.Range("B:G").AutoFilter(Field=6, Criteria1=amounttopass,VisibleDropDown=False)
        time.sleep(timeout)
于 2021-09-14T11:56:59.110 に答える