ser seguro podria partes pagina otras interactuar esta error control con python com crystal-reports activex pywin32

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?



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()