Red de conocimiento informático - Material del sitio web - ¿Cómo programar con excel?

¿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]);

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

{

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);

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 ;

}

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

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).