¿Cómo programar con excel?
Idea básica
El método de implementación básico es el mismo que el del artículo anterior "Leer y escribir archivos de tablas de Excel directamente a través de ODBC". Ambos usan ODBC para leer archivos de tablas de Excel como base de datos. archivos, escritura y otras operaciones, por lo que el nombre del encabezado de la fila escrito en el archivo de la tabla de Excel debe ser único (no tenga nombres duplicados, lo que equivale al valor de ID en la base de datos). Las operaciones en archivos de Excel en este artículo están encapsuladas en una clase CSpreadSheet, a través de la cual podemos implementar muy fácilmente varias operaciones de datos de tablas de Excel y podemos expandir esta clase para satisfacer nuestras propias necesidades.
Implementación específica
1. ¿Incluir el archivo de encabezado de operación del archivo Excel?
#include "CSpreadSheet.h"
2. ¿Archivo de Excel y escribir datos predeterminados?
// Crea un nuevo nombre y ruta de archivo de Excel, TestSheet es el nombre de la tabla interna
CSpreadSheet SS("c:\\Test.xls" , "TestSheet");
CStringArray sampleArray, testRow;
SS.BeginTransaction();
//Agregar título
sampleArray . RemoveAll();
sampleArray.Add("nombre");
sampleArray.Add("edad");
SS.AddHeaders(sampleArray)
//Agregar datos
CString strName[] = {"Xu", "Xu", "Guo", "Niu", "Zhu"};
CString strAge[] ?= {"27", "23", "28", "27", "26"}
for(int i = 0; i lt; sizeof( strName )/sizeof(CString); i )
{
sampleArray.RemoveAll();
sampleArray.Add(strName[i]); p >
sampleArray.Add(strAge[i]);
SS.AddRow(sampleArray);
}
SS.Commit();
3. ¿Leer datos de archivos de Excel?
CSpreadSheet SS("c:\\Test.xls", "TestSheet");
CStringArray Filas, Columna ;
//Borrar el cuadro de lista
m_AccessList.ResetContent();
for (int i = 1; i lt; = SS.GetTotalRows() ; i )
{
//Leer una fila
SS.ReadRow(Rows, i);
CString strContents = " " ;
for (int j = 1; j lt; = Rows.GetSize(); j )
{
if(j == 1)
strContents = Rows.GetAt(j-1);
else
strContents = strContents ?" --gt; " Rows.GetAt(j-1) ) ;
}
m_AccessList.AddString(strContents);
}
4 Agregar e insertar datos de tablas de Excel existentes, reemplazo. ¿Operación?
//Inicializa los datos de la fila de prueba y realiza demostraciones de operaciones para agregar, insertar y reemplazar datos
para (int k = 1; k lt; = 2; k)
//Inicializa los datos de la fila de prueba y realiza demostraciones de operaciones para agregar, insertar y reemplazar datos. p>
{
testRow.Add("Test");
}
SS.AddRow(testRow ?// Agregar al final
SS.AddRow(testRow); , 2); ?//Inserta una nueva fila en la segunda fila
SS.AddRow(testRow, 6, true); //Reemplaza la cuarta fila original con contenido nuevo
SS .AddCell("Xu Jingzhou", 1, 2); // Agrega (no existe) o reemplaza (existe) el contenido de la celda de la segunda fila y la primera columna
SS.Commit();?< / p>
5. Consultar filas, columnas y celdas de datos de tablas de Excel existentes
void CExcelAccessDlg::OnQuery()?
{
CSpreadSheet SS("c:\\Test.xls", "TestSheet");
CStringArray Filas, Columna;
CString tempString = "";
UpdateData();
if(m_strRow == "" amp; amp; m_strColumn == "") // La consulta está vacía
{
AfxMessageBox ("¡El número de fila y el número de columna no pueden estar vacíos al mismo tiempo!");
return;
}
else if(m_strRow == " " amp; amp ; m_strColumn != "") // Consulta los datos de la columna especificada
{
int iColumn = atoi(m_strColumn);
int iCols = SS.GetTotalColumns( );
if(iColumn gt; iCols) // Al realizar consultas más allá del rango de la tabla
{
CString str;
str. Format("El número total de columnas de la tabla es: d, ", iCols);
AfxMessageBox(str "El número de columnas de consulta es mayor que el número total de columnas en la tabla de Excel, ¡vuelva a ingresar!");
return;
}
// Leer una columna de datos y leerla fila por fila
if(!SS.ReadColumn(Columna, iColumna) )
{
AfxMessageBox(SS.GetLastError());
return;
}
CString tmpStr;
for (int i = 0; i lt; Column.GetSize(); i )
{
tmpStr.Format("Número de línea: d, número de columna: d, contenido: s\n", i 1, iColumn, Column.GetAt(i));
tempString = tmpStr;
}
AfxMessageBox(tempString);
}
else if(m_strRow != "" amp;amp; m_strColumn == "") // Consulta el número especificado de filas de datos p>
{
int iRow = ato
i(m_strRow);
int iRows = SS.GetTotalRows();
if(iRow gt; iRows) // Al realizar consultas más allá del rango de la tabla
{
CString str;
str.Format("El número total de filas de la tabla es: d, ", iRows);
AfxMessageBox(str "El número de filas de la consulta es mayor que el número total de filas en la tabla de Excel. ¡Vuelva a ingresar!"
return
}
// Leer los datos de la fila especificada
if(!SS.ReadRow(Rows, iRow))
{
AfxMessageBox(SS.GetLastError()) ;
return;
}
CString tmpStr;
for (int i = 0; i lt; Rows.GetSize() ; i )
{
tmpStr.Format("Número de fila: d, número de columna: d, contenido: s\n", iRow, i 1, Rows.GetAt(i ));
tempString = tmpStr
}
AfxMessageBox(tempString);
}
else if(m_strRow != "" amp; amp; m_strColumn != "") // Consulta los datos de la celda especificada
{
int iRow = atoi(m_strRow), iColumn = atoi (m_strColumn);
int iRows = SS.GetTotalRows(), iCols = SS.GetTotalColumns();?
if(iColumn gt; iCols) // Al realizar consultas más allá de la tabla range
{
CString str;
str.Format("El número total de columnas de la tabla es: d, ", iCols); p>
AfxMessageBox(str "El número de columnas de consulta es mayor que el número total de columnas en la tabla de Excel, ¡vuelva a ingresar!"); p>}
else if(iRow gt; iRows)
{
CString str;
str.Format("El total el número de filas de la tabla es: d, ", iRows);
AfxMessageBox(str "El número de filas de la consulta es mayor que Excel. ¡El número total de filas de la tabla, vuelva a ingresar!" );
return;
}
// Lee los datos de celda de fila y columna especificados
if(!SS.ReadCell( tempString, iColumn, iRow))
{
AfxMessageBox(SS.GetLastError());
return ;
} p>
CString str;
str.Format("Número de fila: d, número de columna: d, contenido: s", iRow, iColumn, tempString);
AfxMessage
eBox(str);
}
}
6. ¿Guardar la conversión de Excel existente como un archivo de texto delimitado especificado?
/ / Convierta el archivo de Excel original a texto separado por punto y coma y guárdelo como un archivo de texto con el mismo nombre
SS.Convert(";");?
7. ¿Tabla?
SS. DeleteSheet(); // Eliminar todas las tablas en el archivo de Excel
SS. DeleteSheet(" TestSheet "?// Eliminar la tabla TextSheet
8. ¿Obtener el número total de filas, el número total de columnas y la fila actual en Excel?
int iCols = SS.GetTotalColumns() // Número total de columnas /p>
int iRows = SS.GetTotalRows(); // Número total de filas
int iCurRow = SS.GetCurrentRow() // Número de fila actual
9 ¿Obtener datos del encabezado de fila?
CStringArray rowHeader;
SS.GetFieldNames(rowHeader);
CString tmpStr;
for (int. i = 0; i lt; rowHeader.GetSize (); i )
{
tmpStr.Format("Número de fila: d, número de columna: d, contenido: s\n ", 1, i 1, rowHeader.GetAt (i));
tempString = tmpStr;
}
AfxMessageBox(tempString);
Finalmente, si desea conocer la implementación detallada Para más detalles, puede verificar el código fuente cuidadosamente después de descargar el código fuente de muestra (se incluyen comentarios detallados).