¿Cómo utilizar el lenguaje C para leer datos de archivos de Excel?
La implementación básica es la misma que la del artículo anterior "Leer y escribir archivos de tablas de Excel directamente a través de ODBC". Todos usan ODBC para tratar los archivos de tablas de Excel como archivos de base de datos para lectura, escritura y otros. operaciones, por lo que el nombre del archivo de encabezado escrito en el archivo de tabla de Excel debe ser único (no tienen el mismo nombre, es equivalente al valor de ID de la base de datos). Este artículo encapsula las operaciones de archivos de Excel en una clase CSpreadSheet. A través de esta clase, podemos implementar de manera muy conveniente varias operaciones en los datos de la tabla de Excel y podemos extender esta clase para satisfacer nuestras propias necesidades.
Implementación específica
1. Incluir archivos de encabezado de operación de archivos de Excel
#include "CSpreadSheet.h"
2. Crear un nuevo Archivo de Excel y escritura de datos predeterminados
//Cree un nuevo nombre y ruta de archivo de Excel, TestSheet es el nombre de la tabla interna
CSpreadSheet.
CSpreadSheet SS("c:\\Test.xls", "TestSheet");
StringArray sampleArray, testRow;
SS.
AddHeaders(sampleArray);
// Agregar datos
CString strName[] = {"Xu Jingzhou", "Xu Zhihui", "Guo Hui", "Niu Yingjun", " Zhu Xiaopeng" };
CString strAge[] = {"27", "23", "28", "27", "26"};
for(int i = 0; i lt; tamaño de (strName)/tamaño de (CString); i )
{
sampleArray.RemoveAll();
sampleArray.Add( strName[i ]);
sampleArray.Add(strAge[i]);
SS.AddRow(sampleArray); p>SS .Commit();
III. Leer datos del archivo Excel
CSpreadSheet SS("c:\\Test.xls", "TestSheet");
CStringArray Filas, Columna;
//Vaciar 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; " Filas. GetAt(j-1);
}
m_AccessList.AddString(strContents);
}
IV.AddRow( testRow, 2); //Inserta una nueva fila en la segunda fila
SS.AddRow(testRow, 6, true //Reemplaza la cuarta fila original con una nueva fila
SS.AddCell("Xu Jingzhou", 1, 2); // Agrega (no existe) o reemplaza (no existe) el contenido de la celda en la segunda fila y la primera columna
SS.p >SS.Commit();
V. Consultar las filas, columnas y celdas de datos existentes en la tabla de Excel
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("¡Los números de fila y columna no pueden estar vacíos!") )
Retorno;
}
else if(m_strRow == "" amp;amp; m_strColumn ! = "") // Consulta 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 consultadas es mayor que el número total de columnas en la tabla de Excel, ¡vuelva a ingresar!") )
Retorno
}
// Lee una columna de datos y lee fila por fila
if(!SS.ReadColumn(Column, iColumn))
{
AfxMessageBox(SS.ReadColumn(Columna, iColumna))