2008-10-22 10 views
5

Estoy construyendo una función "importar desde Excel". Tiene que estar en una DLL, llamada desde una aplicación que no es MFC. Tiene que proporcionar una imagen de la hoja de cálculo en la que los usuarios pueden arrastrar un cuadro de selección (para seleccionar celdas), luego hacer clic en un botón IMPORTAR y hacer lo correcto. Tiene problemas para obtener la hoja de cálculo, tener un botón adyacente y hacer que suceda en una DLL.Necesita control ActiveX para incrustar Excel en un cuadro de diálogo

Fui por la ruta de un cuadro de diálogo MFC dentro de un archivo DLL, pero me bloquearon al tratar de mostrar un cliente OLE para Excel en una ventana del cuadro de diálogo. Solo el soporte que encontré para mostrar Excel usando OLE requería una SDI. Logré que las funciones de automatización funcionaran, y pude leer las células y pintar una "imagen falsa" de ellas en mi diálogo ... pero me temo que eso va a estar incumpliendo mis requisitos.

Intenté crear una SDI. Pude crear una IDE que trajo a Excel como Cliente OLE. Pude manejar el evento de "cambio de selección" e ir a los datos de la celda que necesitaba. En este punto, me frustraron dos elementos:

  1. No se pudo hacer que esta SDI funcione en una DLL de MFC. Fallo en el constructor de CWinApp, afirmando que AfxGetThread no era nulo. Se movió "theApp" para tener un ámbito local dentro de la única función DLL exportada, pero aún no se pudo hacer funcionar, pero con diferentes síntomas: se colgó cuando se agregó AFX_MANAGE_STATE (AfxGetStaticModuleState()); para exportar la función DLL, si no la usé, nunca se ingresó OnInitInstance. Intenté agregar una llamada a la función Run() de la aplicación, pero eso no ayudó. Puedo publicar este código si alguien piensa que tienen una idea de cuál es el problema.

  2. No se pudo presentar una barra de herramientas mientras el elemento de cliente de Excel estaba activo. Podría poner mi "importación" (y otras opciones) en la barra de menú en la parte superior, pero eso no es lo suficientemente evidente. Incluso una barra de herramientas flotante estaba cerrada. Tiene sentido que lo haga, ya que sería confuso tener una barra de herramientas presente que no podría realizar acciones en el elemento activo actualmente ... pero en mi caso, es un problema.

Así que ahora estoy pensando que tengo que volver a la aproximación de diálogo, e incrustar un control ActiveX que nos lleva a un archivo de hoja de cálculo Excel para importar.

Debo permitirme manejar el evento de cambio de selección, o debo permitirme encontrar qué celdas se seleccionan (o se seleccionaron más recientemente si al hacer clic en el botón "importar" en mi diálogo se desactivan las celdas seleccionadas).

También debe venir con términos de licencia razonables, ya que esto se utilizará en una aplicación comercial que está ampliamente disponible para el público.

Si alguien sabe de una "solución rápida" a cualquiera de los enfoques que he estado intentando, eso sería útil también.

Espero que alguien me puede ayudar!

Respuesta

0

Si solo desea incrustar Excel, no necesita nada.

Simplemente incrústelo en un control de host OCX estándar.

+0

Hola Fred. No estoy familiarizado con este control. Google muestra un montón de referencias de aplicaciones de terceros, y en VS, al hacer clic derecho en mi cuadro de diálogo, al seleccionar "Insertar control ActiveX ..." no aparece nada que suene como control OCX Host. ¿Me puede apuntar en la dirección correcta? ¡¡Muchas gracias!! – Steve

+0

¡Vaya! ¡Mis disculpas! Lo siento, Mikea! No sé de dónde saqué el nombre "Fred" de. Demasiada multitarea. – Steve

+0

Encontré el control Microsoft DSOFramer, una muestra OCX que proporcionan interfaces con aplicaciones de Office. No estoy seguro de si eso es lo que sugeriste, pero esto me llevó a donde tenía que estar. ¡Gracias de nuevo! – Steve

Cuestiones relacionadas