python - error - un control activex de esta pagina podria no ser seguro al interactuar con otras partes de la pagina
¿Qué se puede hacer con COM/ActiveX en Python? (4)
Básicamente puede hacer el equivalente de enlace tardío. Entonces, todo lo que esté expuesto a través de IDispatch puede consumirse.
Aquí hay un código que escribí este fin de semana para obtener una imagen de un dispositivo TWAIN a través de Windows Image Acquisition 2.0 y poner los datos en algo que puedo meter en una interfaz de usuario basada en gtk.
WIA_COM = "WIA.CommonDialog"
WIA_DEVICE_UNSPECIFIED = 0
WIA_INTENT_UNSPECIFIED = 0
WIA_BIAS_MIN_SIZE = 65536
WIA_IMG_FORMAT_PNG = "{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}"
def acquire_image_wia():
wia = win32com.client.Dispatch(WIA_COM)
img = wia.ShowAcquireImage(WIA_DEVICE_UNSPECIFIED,
WIA_INTENT_UNSPECIFIED,
WIA_BIAS_MIN_SIZE,
WIA_IMG_FORMAT_PNG,
False,
True)
fname = str(time.time())
img.SaveFile(fname)
buff = gtk.gdk.pixbuf_new_from_file(fname)
os.remove(fname)
return buff
No es bonito, pero funciona. Yo afirmaría que es equivalente a lo que tendrías que escribir en VB.
Estoy pensando que voy a tener que ejecutar informes mensuales en Crystal Reports. He leído que puede automatizar esto con COM / ActiveX, pero no estoy tan avanzado para comprender qué es esto o qué puede hacer con él.
Estoy bastante familiarizado con Python y, por lo que he leído, parece que podría abrir el informe, quizás cambiar algunos parámetros, ejecutarlo y exportarlo.
También trabajo mucho con Excel y parece que también usas COM / ActiveX para interactuar con él.
¿Alguien puede explicar cómo funciona esto y tal vez dar un breve ejemplo?
También puede encontrar consejos útiles aquí: http://timgolden.me.uk/python/win32_how_do_i.html es fácil de adaptar a cualquier tipo de aplicación.
Primero tienes que instalar el maravilloso módulo pywin32 .
Proporciona soporte COM. Necesita ejecutar la utilidad makepy. Se encuentra en C: ... / Python26 / Lib / site-packages / win32com / client. En Vista, debe ejecutarse con derechos de administrador.
Esta utilidad mostrará todos los objetos COM disponibles. Puedes encontrar el tuyo y generará un contenedor de Python para este objeto.
El contenedor es un módulo python generado en la carpeta C: ... / Python26 / Lib / site-packages / win32com / gen_py. El módulo contiene la interfaz de los objetos COM. El nombre del archivo es el ID único de COM. Si tiene muchos archivos, a veces es difícil encontrar el correcto.
Después de eso solo tienes que llamar a la interfaz correcta. Es mágico :)
Un pequeño ejemplo con excel
import win32com.client xlApp = win32com.client.Dispatch("Excel.Application") xlApp.Visible=1 workBook = xlApp.Workbooks.Open(r"C:/MyTest.xls") print str(workBook.ActiveSheet.Cells(i,1)) workBook.ActiveSheet.Cells(1, 1).Value = "hello" workBook.Close(SaveChanges=0) xlApp.Quit()
Aquí hay una solución de trabajo que crea un archivo y agrega valor a una celda:
import win32com.client
import xlsxwriter
import os
cwd = os.getcwd()
file_path = cwd + "//test.xlsx"
#Create an excel file
workbook = xlsxwriter.Workbook(file_path)
worksheet = workbook.add_worksheet()
workbook.close()
#Open an excel application
xlApp = win32com.client.Dispatch("Excel.Application")
xlApp.Visible=1
workBook = xlApp.Workbooks.Open(file_path)
print str(workBook.ActiveSheet.Cells(1,1))
workBook.ActiveSheet.Cells(1, 1).Value = "hello55"
workBook.Close(SaveChanges=1)
xlApp.Quit()