2012-04-03 8 views
8

Tengo el excelRTDserver.py funcionando en Excel 2010 (32 bits) cambiando el valor EXCEL_TLB_MINOR a 7. Puedo ver el servidor en la lista de complementos y si ingreso =RTD("Python.RTD.TimeServer","","seconds","5") en una celda, obtengo la hora actual. Pero nunca se actualiza. Si cambio el "5" a otro número, recibo una actualización, pero después del cambio inicial, nunca vuelve a cambiar.Servidor Excel RTD en Python sin datos de actualización

¿Cómo puedo obtener la actualización? Encontré a alguien más con un problema similar here, pero no hay solución.

ACTUALIZACIÓN: Tengo un poco más: hay una excepción planteada en ServerStart al convertir el objeto de devolución de llamada PyIDispatch en un objeto de devolución de llamada IRTDUpdateEvent. Usando this method para capturar el mensaje de error, aparece "No se puede crear un archivo cuando ese archivo ya existe". Si sigo la sugerencia here y uso win32com.client.CastTo(CallbackObject,'IRTDUpdateEvent') obtengo "Este objeto COM no puede automatizar el proceso makepy - ejecute makepy manualmente para este objeto", pero ya he ejecutado makepy para Microsoft Excel 12.0 Object Library (1.6).

Cualquier ayuda sería muy apreciada.

Respuesta

3

Creo que puede estar fuera de suerte.

According to the author of excelRTDServer.py in a recent python-win32 thread:

El mensaje que esto es en respuesta a su describe exacta problema, y ​​es reciente, por lo que tal vez usted ya tiene esta información directamente, pero en caso de que no lo hizo ...

temo que las cosas han cambiado con IRTDUpdateEvent con versiones recientes de Excel (desde Excel 2007? Creo que eso no es así 'reciente' nunca más ...).

Mientras que la caza alrededor para las noticias de cambios en la interfaz, me encontré con este hilo en un foro de Java:

http://www.nevaobject.com/phpbb3/viewtopic.php?t=516

La parte que me preocupa es este comentario:

"Aparentemente en Excel 12 (Excel 2007) el objeto de devolución de llamada de RTD que implementa la interfaz dual IRTDUpdateEvent lanza una excepción (excepción genérica COM 0x80020009) cuando se llama a través de IDispatch. Si utiliza v-table , la vinculación de UpdateNotify se realiza correctamente. Realmente no sé si es un error en Excel 12 o una función."

Hasta ahora no he podido confirmar esto en contra de la información de MSDN ... Pero si esto es cierto , eso explica el problema que se ve. Muchos más viejos ejemplos en la web, y pywin32 + makepy tratar esta interfaz como IDispatch, y se envuelve en consecuencia.

no creo que podemos arreglar esto con pywin32 ya que es en este momento. Mi comprensión de es que se basa en el soporte de IDispatch. Puede que tenga que mirar los comtypes (http://starship.python.net/crew/theller/comtypes /) para envolver los objetos (¿nuevo?) IRTDUpdateEvent, o tal vez una extensión C. :(

+0

Sí, publiqué la pregunta allí también. Parece que no tengo suerte. – MatlabSorter

1

Python:

consigo "Este objeto COM no se puede automatizar el proceso makepy - por favor ejecute el makepy manualmente para este objeto", pero ya ha ejecutado makepy para Microsoft Excel 12.0 Object Library (1.6) .

Ayer en el trabajo después de un tiempo de leer su pregunta, me olvidaba que es python y java no :)) .. Bueno, lo único que pienso ahora es que parece que necesita para ejecutar el PIA para Office 2010.

Editar más tarde: si tiene problemas después de lo que le dije, por favor comenten y no inviertan, porque este problema es poco común.

JAVA:

Esto sucede porque falta la opción de generar v-mesas.

necesita modificar ServerStart método y también IRTDServer interfaz y IRTDServer_Impl class., Por lo CallbackObject es COMIUnknown. Luego debe generar la clase IRTDServer_Skel ejecutando IBuilder.

Ahora se puede generar un nuevo envoltorio java para IRTDUpdateEvent para solicitar tabla v:

enter image description here

+0

Gracias por la respuesta, se agradece. Sin embargo, estoy buscando una solución de Python. Tristemente no soy fluido en Java. – MatlabSorter

+0

Actualizo mi respuesta. –

+0

El votante no fui yo, estoy pidiendo ayuda y la estás dando.Desafortunadamente, instalé el PIA pero no ayudó. – MatlabSorter

3

Para evitar este problema he creado un nuevo proyecto en GitHub para sobresalir pythoncom tipos:

https://github.com/pyxll/exceltypes

Esto incluye una versión ligeramente modificada de excelRTDServer.py que utiliza el nuevo tipo PyIRTDUpdateEvent en lugar de la envoltura makepy win32com, por lo que ahora funciona en Excel 2010 (busque los comentarios 'EXCELTYPES_MODIFICATION' en exceltypes/demos/excelRTDServer.py).

Para compilar la proyecto que tendrá instalado Visual Studio (que no va a construir con gcc) y se puede construir mediante el setup.py incluido en el proyecto de la siguiente manera:

python setup.py install 

Si necesita forzar que se use Visual Studio en lugar de gcc usa la opción "--compiler=msvc", si estás usando anaconda por ejemplo. Si desea utilizar Visual Studio 2012 en lugar del predeterminado 2.010 añadir las siguientes líneas a setup.py:

from distutils import msvc9compiler 
msvc9compiler.VERSION = 11 
0

Ese mensaje de error a veces se eleva cuando u puso en algo así como 'bucle for', aquí es una hackly solution 4u: import time, y use 'sleep()' en su bucle

Cuestiones relacionadas