windows excel mfc activex ole

windows - Necesita control ActiveX para incrustar Excel en un diálogo



mfc ole (1)

Si solo desea incrustar Excel, no necesita nada.

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

Estoy construyendo una función de "importación 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.

Seguí 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.

Así que 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. Me frustraron en este punto por 2 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 alcance 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 del 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 necesito volver al enfoque de diálogo e incorporar un control ActiveX que muestra un archivo de hoja de cálculo de Excel para importar.

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

También debe venir con términos de licencia razonables, ya que se utilizará en una aplicación comercial 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 pueda ayudarme!