我正在使用以下代码在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
还有一个问题:我的工作表包含一些启用了过滤的标题。所以当设置过滤器并从Python打开Workbook时,它有时会要求我输入一个唯一名称来保存过滤器。为什么会这样?下面是对话框:
编辑 好的,在这里(德语)说,后面的问题是2007和2010文件中已知的错误:https://social.msdn.microsoft.com/Forums/de-DE/3dce9f06-2262-4e22-a8ff-5c0d83166e73/excel-api-interne-namen,如果您以编程方式打开Excel文件,则似乎会出现此问题。不知道是否有解决方法。
try
块中使用以下代码:excel.Visible = False
、wb.Close(True)
和excel.Quit
。 - Parfait