Red de conocimiento informático - Conocimiento del nombre de dominio - ¿Cómo agregar un programa escrito en lenguaje C a Excel?

¿Cómo agregar un programa escrito en lenguaje C a 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 el archivo de tablas de Excel. un archivo de base de datos, 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 archivo de encabezado de operación de archivo Excel

#include "CSpreadSheet.h"

2. Crear nuevo Excel archivo y escribe datos predeterminados

// Crea un nuevo nombre de archivo Excel y ruta, 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);

p>

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

p>

//Borrar el cuadro de lista

m_AccessList.ResetContent();

for (int i = 1; i < = SS.GetTotalRows(); i++)

{

// Leer una fila

SS.ReadRow(Rows, i);

CString strContents = "";

for (int j = 1; j <= Rows.GetSize(); j++)

{

if( j == 1)

strContents = Rows.GetAt(j-1);

else

strContents = strContents + " --> " + Filas. GetAt(j-1);

}

m_AccessList.AddString(strContents);

}

4. Agregar, insertar, y reemplace los datos existentes de la tabla de Excel

p>

//Inicialice los datos de la fila de prueba y realice demostraciones de operaciones para agregar, insertar y reemplazar datos

for (int k = 1; k <= 2 ; k++)

{

testRow.Add("Prueba");

}

SS.AddRow(testRow);

// Agregar al final

SS.AddRow(testRow, 2); // Insertar una nueva fila en la segunda fila

SS.AddRow(testRow, 6, true); // Reemplazar la cuarta fila original con contenido nuevo

SS.AddCell("Xu Jingzhou", 1,2 // Agregar (no existe) o reemplazar (existir) celdas en la segunda fila y Contenido de la primera columna

SS.Commit();

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 == "" && 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 == "" && m_strColumn != "") // Consulta los datos de la columna especificada

{

int iColumn = atoi(m_strColumn);

int iCols = SS.GetTotalColumns();

if(iColumn > 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(Column, iColumn))

{

AfxMessageBox(SS.GetLastError ());

return;

}

CString tmpStr;

for (int i = 0; i < 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 != "" && m_strColumn == " ") // Consulta el número especificado de filas de datos

{

int iRow = atoi (m_strRow);

int iRows = SS.GetTotalRows();

p>

if(i

Row > iRows) // Al realizar consultas más allá del rango de la tabla

{

CString str;

str.Format("El número total de filas en 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;

}

// Lee los datos de la fila especificada

if(!SS.ReadRow(Rows, iRow))

{

AfxMessageBox (SS.GetLastError());

return;

}

CString tmpStr;

for (int i = 0; i < Rows.GetSize(); i++)

{

tmpStr.Format("Número de fila: %d, columna número: %d, contenido: %s\n", iRow , i+1, Rows.GetAt(i));

tempString += tmpStr;

}

AfxMessageBox(tempString);

}

else if(m_strRow != "" && 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 > iCols) // Al realizar consultas más allá del rango de la tabla

{

CString str;

str.Format( "El número total de columnas en 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, por favor ¡vuelve a entrar!");

return;

}

else if(iRow > iRows)

{

CString str;

str.Format("El número total de filas en la tabla es: %d , ", iRows);

AfxMessageBox(str + "El número de filas de consulta es mayor que el número total de filas en la tabla de Excel, ¡vuelva a ingresar!");

return;

}

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

AfxMessageBox(str);

}

}

>

6. Guarde la conversión de Excel existente como un archivo de texto delimitado especificado

// Convierta el archivo de Excel original a texto delimitado por punto y coma y guárdelo como un archivo de texto con el mismo nombre

SS.Convert(";");

7. Eliminar tablas en Excel

SS.DeleteSheet() // Eliminar todas las tablas en el archivo de Excel

SS. DeleteSheet(" TestSheet "); // Eliminar la tabla TextSheet en Excel

8. Obtenga 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 < 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 los detalles detallados de la implementación, puede verificar el código fuente cuidadosamente después de descargar el código fuente de muestra. código (se incluyen comentarios detallados).