C/Visual C - Visual c++ con excel

 
Vista:

Visual c++ con excel

Publicado por Pedro (1 intervención) el 18/07/2003 15:25:27
aaaaaaaaaa, me diría alguien como puedo hacer para que cuando pulse un botón en un proyecto basado en diálogo me realize una macro de una hoja que le adjunte al mismo proyecto.

Explicome, tengo un proyecto Basado en Dialogo al cual le inserté una hoja de calculo de Excel, ahora bien, hice una macro y deseo que cuando pulse un botón aparezca los resultados de dicha macro

Además quisiera saber como hago para trabajar directamente con las celdas de la hoja de excel sin hacer las macros, porque encontre una debilidad en una función de Excel.

Agradezco a quien me solvente la duda o me diga por donde guiarme
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Ejecutar macros y manipular celdas de Excel desde un botón en diálogo

Publicado por Alejandro (1286 intervenciones) el 15/07/2025 20:49:06
Pedro, para lograr que, al pulsar un botón en tu proyecto basado en diálogo, se ejecute una macro de Excel que tienes en una hoja adjunta, y además trabajar directamente con las celdas sin macros, te recomiendo estos pasos:

---

1. Ejecutar una macro de Excel desde C++



Paso clave: Usa Automation (COM) para controlar Excel desde C++.
Aquí tienes un ejemplo básico para abrir Excel, cargar tu archivo, y ejecutar una macro:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <afxdisp.h> // Para COM y Automation
 
void EjecutarMacroExcel() {
    CoInitialize(NULL); // Inicializa COM
 
    try {
        // Crear instancia de Excel
        _ApplicationPtr pXL;
        pXL = pXL.CreateInstance(L"Excel.Application");
        pXL->Visible = VARIANT_TRUE; // Opcional: mostrar Excel
 
        // Abrir el libro
        _WorkbookPtr pLibro = pXL->Workbooks->Open(L"C:\\ruta\\a\\tuArchivo.xlsx");
 
        // Ejecutar la macro (nombre completo, incluyendo módulo si es necesario)
        pXL->Run(L"NombreDeTuMacro");
 
        // Guardar y cerrar
        pLibro->Close(VARIANT_FALSE);
        pXL->Quit();
    } catch (_com_error &e) {
        AfxMessageBox(e.Description());
    }
 
    CoUninitialize();
}

Notas:
- Asegúrate de tener habilitada la referencia a la librería de Excel en tu proyecto (`Tools` > `References` > `Microsoft Excel XX.X Object Library`).
- La macro debe estar en un módulo estándar y tener un nombre global.

---

2. Trabajar directamente con celdas sin macros



¿Cómo?
Usa Automation para acceder a las celdas y modificar sus valores directamente, sin necesidad de macros.

Ejemplo para poner un valor en una celda:

1
2
3
4
5
// Asumiendo que ya tienes la instancia de Excel y el libro abierto
Excel::_WorksheetPtr pSheet = pLibro->Worksheets->Item[L"Hoja1"];
 
pSheet->Cells->Item[1][1] = "Texto en A1"; // Escribir en A1
pSheet->Cells->Item[2][1] = 123; // Escribir en A2

Y para leer valores:

1
2
_variant_t valor = pSheet->Cells->Item[1][1]->Value2;
CString strValor = (LPCTSTR)(_bstr_t)valor;

---

3. Cómo integrar esto en un botón en tu diálogo



- En el manejador del botón (`OnBnClickedTuBoton`), llama a la función `EjecutarMacroExcel()` o la que tenga la lógica para manipular Excel.
- Asegúrate de inicializar COM (`CoInitialize`) y liberarlo (`CoUninitialize`) en tu programa.

---

Resumen



- Usa Automation para controlar Excel desde C++.
- Ejecuta macros con `pXL->Run()`.
- Trabaja con celdas accediendo a `Cells->Item[row][col]`.
- No necesitas macros si solo quieres modificar celdas directamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar