Red de conocimiento informático - Material del sitio web - Cómo utilizar VC++ para generar automáticamente tablas de Excel

Cómo utilizar VC++ para generar automáticamente tablas de Excel

Primero cree un proyecto de cuadro de diálogo y asígnele el nombre VCExcel. Agregue un botón en el cuadro de diálogo con el ID de control ID_RUNEXCEL y luego agregue el mensaje BN_CLICKED al botón. Su función de mapeo de mensajes es OnRunexcel (). Necesitamos programar y generar una tabla de la siguiente manera. ?

El formato es el siguiente: 1. La fuente del encabezado de la tabla es Song Dynasty, negrita, el color es blanco, el color de fondo es azul oscuro y la alineación central vertical y horizontal es vertical; 2. La fuente del texto principal en la tabla es Song Dynasty y el color es blanco. Es azul oscuro, el color de fondo es gris y está alineado vertical y horizontalmente en el centro. 3. Todos los bordes y el texto se ajustan automáticamente; . ?

En BOOL?CVCExcelApp::InitInstance(), agregue el siguiente código después de la declaración int?nResponse?=?dlg.DoModal(): ?

if(CoInitialize(NULL) )==0)//¿Inicializar la biblioteca COM?

{? AfxMessageBox("¡Error en la inicialización de COM!");? exit(1);?

}?

Agregar antes del retorno?FALSE; declaración: ::CoUninitialize();//Liberar la biblioteca COM. ?

Para llamar a la interfaz de Excel, abrimos MFC?ClassWizard->Automation->Add?Class->From?a?type?library, seleccionamos [Ruta de instalación de Excel]\EXCEL.exe, y luego agregue todas las clases, el archivo de encabezado es excel.h y el archivo fuente es excel.cpp. Por supuesto, también puede agregar algunas de las clases más utilizadas, como _Application, Workbooks, _Workbook, Worksheets, _Worksheet y Range, porque la mayoría de los tutoriales que circulan en Internet solo agregan estas clases. necesidades personales. Pero en este ejemplo, al menos necesitamos usar la clase Interior (configurar el color de fondo) y la clase Fuente (configurar la fuente), y es simple y conveniente expandir la función pase lo que pase, simplemente introdúzcalas todas. ! Pero hay un problema con esto. Puede causar un conflicto de nombre de clase. Por ejemplo, originalmente escribiste una clase llamada Font y cuando la agregaste toda, agregaste la clase Font nuevamente. Esta es una definición repetida, pero puedes hacerlo. Utilice el espacio de nombres para resolver este problema. Luego agregue al principio del archivo VCExcelDlg.cpp (si el sistema lo ha agregado automáticamente, no lo agregue nuevamente):?

#include?"VCExcel.h"?

#include? "comdef.h"?

De esta manera, nuestro programa puede llamar libremente a EXCEL y todo está listo. ?

Primero agregue las siguientes variables miembro en CVCExcelDlg para controlar la aplicación, el libro y las celdas de Excel. ?

Rango?m_ExlRge;?

_Worksheet?m_ExlSheet;?

Hojas de trabajo?m_ExlSheets;?

_Workbook?m_ExlBook;?

Workbooks?m_ExlBooks;?

_Application?m_ExlApp;?

Usamos la plantilla de Excel cargada para generar las tablas requeridas y crear una tabla en la carpeta Debug de este archivo de Excel del proyecto llamado Template.xls.

Nuestro código OnRunexcel() es el siguiente (ver comentarios para más detalles):?

void?CVCExcelDlg::OnRunexcel()?

{?

// ?TODO :?Add?your?control?notification?handler?code?here?

//¿Crear un proceso de Excel2003 usando el objeto m_ExlApp?

if(!m_ExlApp.CreateDispatch( "Excel.Application ",NULL))?

{? AfxMessageBox("¡Error al crear el servicio de Excel!");? >//¿Establecer en Visible?

m_ExlApp.SetVisible(TRUE);?

////////////////////El A continuación se obtiene la ruta a la aplicación ///////////////////?

CString?theAppPath,theAppName;?

char? Path[MAX_PATH];?

GetModuleFileName(NULL,Path,MAX_PATH);//¿Obtener la ruta completa de la aplicación?

theAppPath=(CString)Path;?

theAppName=AfxGetApp( )->m_pszAppName;?

theAppName+=".exe";?

//¿Eliminar el último nombre del archivo?

int?length1,length2; ?

length1=theAppPath.GetLength();?

length2=theAppName.GetLength();?

theAppPath.Delete (longitud1-longitud2,longitud2) ;?

//////////////////////////////////// ///////// ////////////////////////?

CString?TempPath="";?

TempPath=theAppPath+" Template.xls";//¿Ruta a la plantilla EXCEL?

m_ExlBooks.AttachDispatch(m_ExlApp.GetWorkbooks(),TRUE);?

m_ExlBook.AttachDispatch(m_ExlBooks.Add((_variant_t )TempPath),TRUE);//¿Cargar plantilla EXCEL?

m_ExlSheets.AttachDispatch(m_ExlBook.GetSheets(),TRUE);//¿Cargar página de hoja?

//¿Agregar nueva página de hoja?

m_ExlSheets.Add(vtMissing,vtMissing,_variant_t((long)1),vtMissing);?

//Eliminar ¿la segunda página de hoja?

m_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_variant_t((long)2)),TRUE);?

m_ExlSheet.Delete();?

//No. ¿Cambiar el nombre de una página de hoja a TestSheet?

m_ExlSheet.AttachDispatch(m_ExlSheets.G

etItem(_variant_t((long)1)),TRUE);?

m_ExlSheet.SetName("TestSheet");?

///////Fusionar la primera fila Celdas A1 a D1//////?

//¿Cargar las celdas que se van a fusionar?

m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t("A1"), _variant_t( "D1")),TRUE);?

m_ExlRge.Merge(_variant_t((long)0));?

////////Establecer el contenido de la tabla ////////?

m_ExlRge.AttachDispatch(m_ExlSheet.GetCells(),TRUE);//¿Cargar todas las celdas?

m_ExlRge.SetItem(_variant_t( (long )1),_variant_t((long)1),_variant_t("Estadísticas del curso de posgrado del Departamento de Matemáticas"));?

m_ExlRge.SetItem(_variant_t((long)2),_variant_t((long )1 ),_variant_t("nombre del curso"));?

m_ExlRge.SetItem(_variant_t((long)2),_variant_t((long)2),_variant_t("hora de clase"));? /p>

m_ExlRge.SetItem(_variant_t((long)2),_variant_t((long)3),_variant_t("Dificultad"));?

m_ExlRge.SetItem(_variant_t(( long )2),_variant_t((long)4),_variant_t("Método de enseñanza"));?

m_ExlRge.SetItem(_variant_t((long)3),_variant_t((long)1), _variant_t ("Análisis funcional"));?

m_ExlRge.SetItem(_variant_t((long)3),_variant_t((long)2),_variant_t("60"));?

m_ExlRge.SetItem(_variant_t((largo)3),_variant_t((largo)3),_variant_t("normal"));?

m_ExlRge.SetItem(_variant_t((largo)3), _variant_t((long)4),_variant_t("Conferencias del profesor"));?

m_ExlRge.SetItem(_variant_t((long)4),_variant_t((long)1),_variant_t(" Colector diferencial "));?

m_ExlRge.SetItem(_variant_t((long)4),_variant_t((long)2),_variant_t("40"));?

m_ExlRge. SetItem(_variant_t((long)4),_variant_t((long)3),_variant_t("Es difícil ser anormal"));?

m_ExlRge.SetItem(_variant_t((long)4), _variant_t((long)4),_variant_t("autoestudio");?

m_ExlRge.SetItem(_variant_t((lon

g)5),_variant_t((long)1),_variant_t("Ecuaciones elípticas de segundo orden y sistemas de ecuaciones"));?

m_ExlRge.SetItem(_variant_t((long)5),_variant_t ( (long)2),_variant_t("60"));?

m_ExlRge.SetItem(_variant_t((long)5),_variant_t((long)3),_variant_t("Es difícil") ) ;?

m_ExlRge.SetItem(_variant_t((long)5),_variant_t((long)4),_variant_t("Discusión"));?

m_ExlRge.AttachDispatch( m_ExlSheet .GetUsedRange());//¿Cargar celdas utilizadas?

m_ExlRge.SetWrapText(_variant_t((long)1));//¿Configurar el texto de la celda para que se ajuste automáticamente?

//¿Establecer el método de alineación en centrado horizontal y vertical?

//Alineación horizontal: predeterminado=1, centro=-4108, izquierda=-4131, derecha=-4152?

//Alineación vertical: predeterminado=2, centro=-4108, izquierda=-4160, derecha=-4107?

m_ExlRge.SetHorizontalAlignment(_variant_t((long)-4108));?

m_ExlRge.SetVerticalAlignment(_variant_t((long)-4108));?

///////Establecer la fuente general, el tamaño de fuente y el color//////?

Fuente?ft;?

ft.AttachDispatch(m_ExlRge.GetFont());?

ft.SetName(_variant_t("宋体")); / /¿Fuente?

ft.SetColorIndex(_variant_t((long)11));//¿Color de fuente?

ft.SetSize(_variant_t((long)12));/ /¿Tamaño de fuente?

///////////Establecer fuente y color del título//////////?

m_ExlRge.AttachDispatch(m_ExlSheet GetRange(_variant_t("A1"),_variant_t("D1")));?

ft.AttachDispatch(m_ExlRge.GetFont());?

ft.SetBold(. _variant_t ((long)1));//¿Negrita?

ft.SetSize(_variant_t((long)13));?

ft.SetColorIndex(_variant_t((long) 2));?

CellFormat?cf;?

cf.AttachDispatch(m_ExlRge.GetCells());?

/////// ///////Establecer color de fondo//////////////////?

Interior?it;?

it. AttachDispatch (m_ExlRge.GetInterior());?

it.SetColorIndex(_variant_t((long)11));//¿Color de fondo del título?

////El fondo de el contenido de la tabla Color////?

m_ExlRge.AttachDispat

ch(m_ExlSheet.GetRange(_variant_t("A2"),_variant_t("D5")));?

it.AttachDispatch(m_ExlRge.GetInterior());?

it .SetColorIndex(_variant_t((long)15));?

///////////////Establecer el borde de la tabla///////// /// /?

Rango?UnitRge;?

CString?CellName;?

for(int?i=1;i<=4;i++ )?

{? for(int?j=1;j<=4;j++)? {? CellName.Format("%c%d",j+64,i);//El nombre de la celda? UnitRge.AttachDispatch(m_ExlRge.GetRange(_variant_t(CellName),_variant_t(CellName)));//¿Cargar celdas? //LineStyle=estilo de línea?Weight=ancho de línea?ColorIndex=color de línea (-4105 es automático) ? UnitRge.BorderAround(_variant_t((long)1),_variant_t((long)2),_variant_t((long)-4105),vtMissing);//¿Establecer el borde?

}?

//Liberar el objeto (¡muy importante!)?

m_ExlRge.ReleaseDispatch();?

m_ExlSheet.ReleaseDispatch();?

m_ExlSheets.ReleaseDispatch();?

m_ExlBook.ReleaseDispatch();?

m_ExlBooks.ReleaseDispatch();?

//m_ExlApp debe liberarse; de ​​lo contrario, habrá un proceso de Excel residente en la memoria después de que finalice el programa y se producirá un error cuando el programa se ejecute repetidamente.

m_ExlApp.ReleaseDispatch();?

//Salir del programa ?m_ExlApp.Quit();?

}