次のコードを使用して、Excel 内でブックを開いて表示しています。
import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Open('my_sheet.xlsm')
ws = wb.Worksheets('blaaaa')
excel.Visible = True
ファイル 'my_sheet.xlsm' が既に開かれている場合、保存せずにもう一度開くかどうかを Excel が尋ねてきます。
ワークブックが既に開いているかどうかを事前に確認するにはどうすればよいですか?
編集:今までにわかった:
if excel.Workbooks.Count > 0:
for i in range(1, excel.Workbooks.Count+1):
if excel.Workbooks.Item(i).Name is 'my_sheet.xlsm':
wb = excel.Workbooks.Item(i)
break
もう 1 つ質問があります。私のワークシートには、フィルタリングを有効にしたヘッダーがいくつか含まれています。そのため、フィルターが設定されている場合、および Python からワークブックを開くと、フィルターを保存するために一意の名前を入力するように求められることがあります。何故ですか?これはダイアログです:
編集OK ここでは、後者の問題は 2007 および 2010 ファイルの既知のバグであると (ドイツ語で) 述べています: https://social.msdn.microsoft.com/Forums/de-DE/3dce9f06-2262-4e22-a8ff- 5c0d83166e73/excel-api-interne-namenプログラムで Excel-Files を開くと存在するようです。回避策があるかどうかはわかりません。