2011-03-15 23 views
8

Estoy automatizando algunas tareas relacionadas con Excel que tardan mucho tiempo.¿Cómo puedo forzar Python (usando win32com) para crear una nueva instancia de Excel?

estoy creando una instancia de Excel usando: sin embargo

excel = win32.gencache.EnsureDispatch('Excel.Application') 
wb = excel.Workbooks.Add() 

, después de que el guión se pone en marcha, si selecciono un libro de Excel abierto (no el pitón está trabajando en), la secuencia de comandos Python se bloquea. Sin embargo, si abro un nuevo libro de Excel y escribo cosas, el script de Python no se verá afectado.

¿Hay alguna manera particular de llamar a Excel para evitar que esto suceda? O cualquier otra solución?

EDITAR: Esto parece funcionar.

excel = win32.DispatchEx('Excel.Application') 
+0

No estaría de más si usted también mencionar qué versiones estás usando por las dudas –

+0

Office 2007, python 2.7 – jck

+0

¿cuál es la situación con la pregunta? ¿Encontraste una respuesta? Por favor déjanos saber. –

Respuesta

1

¿Por qué no lo haces así?

from win32com import client 
excel=client.Dispatch("Excel.Application") 
+3

. Si no ejecuta make.py para generar un "proxy estático", entonces se requiere 'EnsureDispatch' para acceder al' win32com.constants'. Vea este enlace: http://timgolden.me.uk/python/win32_how_do_i/generate-a-static-com-proxy.html Además, 'Dispatch' no resuelve su problema, la solución es' DispatchEx() ' – Symmitchry

0

Aquí está una manera de crear una nueva instancia y uso de caché estática (que es más rápido y le da la capacidad de utilizar kwargs):

from win32com.client import gencache 
import pythoncom 

clsid = "Word.Application" 
clsid = pythoncom.CoCreateInstanceEx(clsid, None, pythoncom.CLSCTX_SERVER, 
            None, (pythoncom.IID_IDispatch,))[0] 
if gencache.is_readonly: 
    #fix for "freezed" app: py2exe.org/index.cgi/UsingEnsureDispatch 
    gencache.is_readonly = False 
    gencache.Rebuild() 
olApp = gencache.EnsureDispatch(clsid) 
Cuestiones relacionadas