Red de conocimiento informático - Material del sitio web - Cómo verter la salida de C en una hoja de cálculo de Excel

Cómo verter la salida de C en una hoja de cálculo de Excel

Primero puede formatear la salida en lenguaje C en un archivo de texto que se puede importar a EXCEL y luego usar EXCEL para importar manualmente. Para conocer métodos de importación específicos, consulte "Tres métodos para importar datos de texto TXT a Excel": / s/2006-05-12/1042934532.shtml

Este método es el más simple, pero tiene poca automatización y no puede integrarlo en su programa C.

Si usas C/C++ para crear EXCEL, puedes usar ADO u ODBC.

Si utiliza C++/ODBC, puede consultar "Leer y escribir archivos de formulario Excel directamente a través de ODBC": /document/viewdoc/?id=421

Y "Programación para "Implementación de operaciones de archivos de formulario de Excel":/document/viewdoc/?id=421

También hay "Implementación de programación de operaciones de archivos de formulario de Excel":/document/viewdoc/?Implementación de programación de operaciones de archivos de formulario de Excel ":/document/viewdoc /?/document/viewdoc/?id=693

Si su programa está escrito en C++, se recomienda utilizar el método anterior.

Si estás usando C/ODBC, entonces es un poco problemático. Escribí uno antes, creo que fue reescrito en C basado en una clase de C++. La referencia que haces ahora es:

Tres funciones de interfaz:

OpenExcel(): Crea o abre una hoja de cálculo de un archivo Excel

AppendExcel(): Añade registros de datos a la hoja de cálculo

CloseExcel(): Finaliza el proceso

El ejemplo en main() es crear el archivo test.xls, que tiene dos hojas de trabajo. Compilo el programa fuente con VC6.0 y el resultado se puede usar en Excel 2003.

#include

#include

#include

# ifdef _MSC_VER

#pragma comment(lib, "odbc32.lib")

#define SQLLEN SQLINTEGER

#endif

enum errtype { ERRORFREE, ERRACTION, /p>

SQLHENV henv

SQLHDBC hdbc

SQLHSTMT hstmt;

// ------- ------ -------------------------------------------- ------- ------------------------------------------- -------

static void dbError( LPSTR lp, SQLSMALLINT handleType, SQLHANDLE handle)

{

BYTE buf[250], sqlstate[ 15];

SQLGetDiagRec (handleType,handle, 1, sqlstate, NULL,buf.sizeof(buf),NULL);

fprintf(stderr,"%s: %s SQLSTATE =%s\n",lp, buf, sqlstate);

}

// ------------------- --------- ----------------------------------------- ------------ ----------------------------

dbCleanup vacío estático ()

{

si (hstmt! = SQL_NULL_HANDLE) {

SQLFreeStmt(hstmt, SQL_UNBIND);

SQLFreeHandle(SQL_HANDLE_STMT,hstmt);

}

si (hdbc ! = SQL_NULL_HANDLE) {

SQLDisconnect(hdbc);

SQLFreeHandle(SQL_HANDLE_DBC,hdbc);

}

if (henv ! = SQL_NULL_HANDLE) SQLFreeHandle(SQL_HANDLE_ENV,henv);

}

// ----------------------- ------------------------------- ------------ - -------------------------

---------

static void dbErrorCleanup( LPSTR lp,SQLSMALLINT handleType,SQLHENV henv,SQLHDBC hdbc,SQLHSTMT hstmt)

{

mango SQLHANDLE;

switch (handleType) {

caso SQL_HANDLE_STMT:

mango = hstmt;

descanso;

caso SQL_HANDLE_DBC:

handle = hdbc;

break;

default:

handle = henv;

}

if (handle != SQL_NULL_HANDLE) dbError( lp, handleType, handle );

dbCleanup(henv, hdbc, hstmt );

}

//----------------------- --------- --- -------------

static BOOL isFileOpen(const BYTE *fileName)

{

HANDLE hFile

// Abre el archivo en modo de cobertura sin ****.

Compruebe si el archivo EXCEL se está utilizando actualmente...

hFile = CreateFile(fileName,GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);

If (hFile == INVALID_HANDLE_VALUE) {

If (GetLastError() == ERROR_SHARING_VIOLATION) devuelve TRUE; // En uso

else devuelve FALSE // No está en uso o no hay archivo (ahora puede ser) creado)

} else {

BYTE *szFieldType[], int nColCount)

{

SQLRETURN retcode;

BYTE szSql[512], *pszSql=szSql;

BYTE szdatabase[256];

int rc, i;

henv = hdbc = hstmt = SQL_NULL_HANDLE;

if ( isFileOpen(szExcelName) ) return XLSBUSY;

// Preparar el entorno---------- ------- -

retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);

if (retcode!= SQL_SUCCESS) {

dbErrorCleanup( "SQLAllocHandle(ENV)", SQL_HANDLE_ENV,henv,hdbc,hstmt);

Devuelve SQLHANDLEENVERROR;

}

retcode = SQLSetEnvAttr(henv ,SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3 ,0);

if (retcode != SQL_SUCCESS) {

dbErrorCleanup( "SQLSetEnvAttr()",SQL_HANDLE_ENV,henv,hdbc,hstmt

); return SQLSETENVERROR;

}

retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);

if (retcode ! = SQL_SUCCESS) {

dbErrorCleanup("SQLAllocHandle(DBC)",SQL_HANDLE_ENV,henv,hdbc,hstmt);

return SQLHANDLEDBCERROR;

}

// Establecer una conexión a la base de datos-----------------

sprintf(szdatabase, "DRIVER=Microsoft Excel Controlador (*.xls);CREATE_DB=%s;DBQ=%s;READONLY=FALSE;EXCLUSIVE=Sí;",

szExcelName, szExcelName);

//fprintf( s

tderr, "DATABASE:%s\n", szdatabase);

retcode = SQLDriverConnect(hdbc, NULL, (SQLCHAR *)szdatabase, (corto) (strlen(szdatabase)+1), NULL, 0 , NULL, SQL_DRIVER_NOPROMPT);

if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO) {

dbErrorCleanup( "SQLDriverConnect()",SQL_HANDLE_DBC,henv,hdbc,hstmt);

return SQLCONNECTERROR;

}

retcode = SQLAllocHandle(SQL_HANDLE_STMT,hdbc, &hstmt);

if (retcode != SQL_SUCCESS) {

dbErrorCleanup( "SQLAllocHandle(STMT)",SQL_HANDLE_DBC,henv,hdbc,hstmt);

return SQLALLOCSTMTERROR;

}

//Construir la instrucción Ejecutar CREATE TABLE----------------------

pszSql = szSql + sprintf(szSql, "CREATE TABLE % s (", szSheetName);

for (i=0; i<nColCount;++i) {

if (i) *pszSql++ = ',';

pszSql += sprintf(pszSql, "%s %s", szFieldName[i], szFieldType[i]);

}

* pszSql++ = ')' ;

*pszSql = '\0';

//fprintf(stderr, "DECLARACIÓN:[%s]\n", szSql);

retcode = SQLExecDirect(hstmt, szSql, SQL_NTS);

if (retcode ! = SQL_SUCCESS) {

SQLCHAR sqlState[15];

SQLGetDiagField( SQL_HANDLE_STMT, hstmt,1,SQL_DIAG_SQLSTATE,sqlState,sizeof(sqlState ),NULL);

if ( lstrcmpiA(sqlState, "42S01") != 0 ){ // Ya existe...

dbErrorCleanup( " SQLExecDirect()",SQL_HANDLE_STMT,henv,hdbc,hstmt);

Devuelve SQLCREATEERROR;

}

}

Devuelve 0;

}

int AppendExcel (BYTE *szSheetName, BYTE *szFieldName[], int nColCount, BYTE *szDa

ta)

{

int i, rc;

BYTE szSql[512], *s, *p, *d, *psz;

//Construir la instrucción INSERT INTO--------------------------------

psz = szSql + sprintf(szSql, "INSERT INTO %s (", szSheetName);

for (i=0; i

if ( i ) *psz++ = ',';

psz += sprintf(psz, "%s", szFieldName[i]);

}

psz + = sprintf(psz, ") VALORES (%s)", szData);

//fprintf(stderr, "DECLARACIÓN:%s\n", szSql);

rc = (int) SQLExecDirect(hstmt, szSql.SQL_NTS);

if (rc != SQL_SUCCESS) {

dbError( " SQLExecDirect()",SQL_HANDLE_STMT,hstmt);< / p>

}

return rc;

}

void CloseExcel()

{

//fprintf ( stderr, "CleanUp: henv=%08X; hdbc=%08X, hstmt=%08X.\n", henv, hdbc, hstmt);

dbCleanup();

}