Python:使用 Win32 COM Api 打开 Excel 工作簿

2024-04-12

我使用以下代码在 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 询问我是否要在不保存的情况下重新打开它。

如何提前检查工作簿是否已打开,如果已打开,只需将其放在前面即可?

EDIT: 目前发现:

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 打开工作簿时,它有时会要求我输入唯一的名称来保存过滤器。这是为什么?这是对话:

EDIT好吧,这里(用德语)说后一个问题是 2007 年和 2010 年文件中的一个已知错误:https://social.msdn.microsoft.com/Forums/de-DE/3dce9f06-2262-4e22-a8ff-5c0d83166e73/excel-api-interne-namen https://social.msdn.microsoft.com/Forums/de-DE/3dce9f06-2262-4e22-a8ff-5c0d83166e73/excel-api-interne-namen如果您以编程方式打开 Excel 文件,它似乎就存在。不知道是否有解决方法。


当您找到解决方案时,请考虑使用尝试/除了/最后 https://docs.python.org/2/tutorial/errors.html#defining-clean-up-actions堵塞。目前,即使您关闭可见工作表,您的代码也会让 Excel.exe 进程在后台运行(如果使用 Windows,请检查任务管理器)。顺便说一句,在 Python 或任何其他语言(如 VBA)中,任何外部 API(如此 COM 接口)都应始终在应用程序代码期间干净地释放。

下面的解决方案使用定义的函数,openWorkbook()走两种可能的路线:1)首先尝试重新启动指定的工作簿(假设它已打开),2)如果当前未打开,则启动该位置的新工作簿对象。最后嵌套的try/except用于以下情况Workbooks.Open()方法失败,例如文件名不正确。

import win32com.client as win32

def openWorkbook(xlapp, xlfile):
    try:        
        xlwb = xlapp.Workbooks(xlfile)            
    except Exception as e:
        try:
            xlwb = xlapp.Workbooks.Open(xlfile)
        except Exception as e:
            print(e)
            xlwb = None                    
    return(xlwb)

try:
    excel = win32.gencache.EnsureDispatch('Excel.Application')
    wb = openWorkbook(excel, 'my_sheet.xlsm')
    ws = wb.Worksheets('blaaaa') 
    excel.Visible = True

except Exception as e:
    print(e)

finally:
    # RELEASES RESOURCES
    ws = None
    wb = None
    excel = None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python:使用 Win32 COM Api 打开 Excel 工作簿 的相关文章

随机推荐