当前位置:首页 > 行业动态 > 正文

如何读取xlsx数据库数据到C语言中?

要读取xlsx文件,可以使用Python的 pandas库。,“ python,import pandas as pd,df = pd.read_excel('your_file.xlsx'),print(df),

在C语言中读取Excel文件(如.xlsx格式)可以通过多种方式实现,以下是一些常用的方法及其详细步骤:

1、使用第三方库

libxls:这是一个开源库,专门用于读取Excel文件,支持.xls格式。

安装:首先需要从libxls的官方网站下载并安装libxls库,安装完成后,可以在C程序中包含libxls的头文件并链接相应的库文件。

示例代码

 #include <stdio.h>
     #include <libxls/xls.h>
     int main() {
         xlsWorkBook pWB;
         xlsWorkSheet pWS;
         xlsCell cell;
         DWORD i, j;
         pWB = xls_open("path_to_your_excel_file.xls", "UTF-8");
         if (pWB == NULL) {
             printf("Unable to open Excel file.n");
             return 1;
         }
         pWS = xls_getWorkSheet(pWB, 0);
         xls_parseWorkSheet(pWS);
         for (i = 0; i <= pWS->rows.lastrow; i++) {
             for (j = 0; j <= pWS->rows.lastcol; j++) {
                 cell = xls_cell(pWS, i, j);
                 if (cell) {
                     printf("Cell[%d,%d]: %sn", i, j, cell->str);
                 }
             }
         }
         xls_close_WS(pWS);
         xls_close(pWB);
         return 0;
     }

libxlsxwriter:虽然这个库主要用于创建Excel文件,但在某些情况下也可以辅助读取操作,不过,它本身并不直接支持读取.xlsx文件,因此通常需要与其他库结合使用。

xlsxio:这是一个专门用于处理.xlsx文件的库,支持Linux平台上的编译与交叉编译。

安装:可以从其官方网站或源代码仓库下载并安装。

如何读取xlsx数据库数据到C语言中?

示例代码

 #include "xlsxio_read.h"
     #include <stdio.h>
     int main() {
         struct xlsxio handle;
         handle = xlsxio_open("example.xlsx", XLSXIO_OPEN_READ);
         if (!handle) {
             fprintf(stderr, "Failed to open filen");
             return 1;
         }
         int num_sheets = xlsxio_get_num_sheets(handle);
         printf("Number of sheets: %dn", num_sheets);
         for (int i = 0; i < num_sheets; ++i){
             const char sheet_name = xlsxio_get_sheetname_by_index(handle,i);
             printf("Sheet name at index %d is '%s'n", i,sheet_name );
         }
         xlsxio_close(handle);
         return 0;
     }

2、通过ODBC连接数据库

安装ODBC驱动:确保系统中安装了适用于Excel文件的ODBC驱动程序,如“Microsoft Excel Driver”或“ODBC Driver for Excel”。

配置ODBC数据源:在odbc.ini文件中添加一个DSN(数据源名称),指定Excel文件的路径和驱动程序。

编写C代码:使用ODBC API连接到Excel文件,并执行SQL查询以读取数据。

示例代码

如何读取xlsx数据库数据到C语言中?

 #include <stdio.h>
   #include <stdlib.h>
   #include <sql.h>
   #include <sqlext.h>
   void check_error(SQLRETURN ret, SQLHANDLE handle, SQLSMALLINT type) {
       if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) {
           SQLCHAR message[1000];
           SQLCHAR state[SQL_SQLSTATE_SIZE + 1];
           SQLINTEGER native;
           SQLSMALLINT len;
           SQLGetDiagRec(type, handle, 1, state, &native, message, sizeof(message), &len);
           printf("Error: %s, State: %sn", message, state);
       }
   }
   int main() {
       SQLHENV env;
       SQLHDBC dbc;
       SQLHSTMT stmt;
       SQLRETURN ret;
       SQLCHAR outstr[1024];
       SQLSMALLINT outstrlen;
       SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
       SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void )SQL_OV_ODBC3, 0);
       SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);
       ret = SQLDriverConnect(dbc, NULL, (SQLCHAR)"DSN=ExcelFiles;DBQ=path_to_your_excel_file", SQL_NTS, outstr, sizeof(outstr), &outstrlen, SQL_DRIVER_COMPLETE);
       check_error(ret, dbc, SQL_HANDLE_DBC);
       SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
       ret = SQLExecDirect(stmt, (SQLCHAR )"SELECT  FROM [Sheet1$]", SQL_NTS);
       check_error(ret, stmt, SQL_HANDLE_STMT);
       SQLCHAR columnName[64];
       SQLINTEGER columnValue;
       while (SQLFetch(stmt) == SQL_SUCCESS) {
           SQLGetData(stmt, 1, SQL_C_CHAR, columnName, sizeof(columnName), NULL);
           SQLGetData(stmt, 2, SQL_C_LONG, &columnValue, 0, NULL);
           printf("Column: %s, Value: %dn", columnName, columnValue);
       }
       SQLFreeHandle(SQL_HANDLE_STMT, stmt);
       SQLDisconnect(dbc);
       SQLFreeHandle(SQL_HANDLE_DBC, dbc);
       SQLFreeHandle(SQL_HANDLE_ENV, env);
       return 0;
   }

3、通过COM接口操作Excel

初始化COM库:在Windows平台上,使用CoInitialize函数初始化COM库。

获取Excel应用程序的CLSID:使用CLSIDFromProgID函数获取Excel应用程序的CLSID。

创建Excel应用程序实例:使用CoCreateInstance函数创建Excel应用程序实例。

获取Workbooks对象:通过IDispatch接口的GetIDsOfNames和Invoke方法获取Workbooks对象。

打开Excel文件:使用Workbooks对象的Open方法打开指定的Excel文件。

如何读取xlsx数据库数据到C语言中?

获取Sheet对象:通过Workbooks对象的Worksheets属性获取Sheet对象。

读取单元格数据:使用Sheet对象的Cells属性和Range对象的Value2属性读取单元格数据。

释放资源:在完成操作后,使用CoUninitialize函数释放COM库资源。

示例代码

 #include <windows.h>
   #include <ole2.h>
   #include <stdio.h>
   int main() {
       HRESULT hr;
       CLSID clsid;
       hr = CoInitialize(NULL);
       if (FAILED(hr)) {
           printf("Failed to initialize COM library.n");
           return 1;
       }
       hr = CLSIDFromProgID(L"Excel.Application", &clsid);
       if (FAILED(hr)) {
           printf("Failed to get CLSID.n");
           return 1;
       }
       IDispatch pExcelApp, pWorkbooks, pWorkbook, pSheet, pRange;
       VARIANT result;
       hr = CoCreateInstance(&clsid, NULL, CLSCTX_LOCAL_SERVER, &IID_IDispatch, (void )&pExcelApp);
       if (FAILED(hr)) {
           printf("Failed to create Excel instance.n");
           return 1;
       }
       VARIANT x;
       x.vt = VT_EMPTY;
       hr = pExcelApp->lpVtbl->GetIDsOfNames(pExcelApp, &IID_NULL, L"Workbooks", 1, LOCALE_USER_DEFAULT, &x);
       pExcelApp->lpVtbl->Invoke(pExcelApp, x.lVal, &IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, NULL, &result, NULL, NULL);
       pWorkbooks = result.pdispVal;
       VARIANT fileName;
       fileName.vt = VT_BSTR;
       fileName.bstrVal = SysAllocString(L"example.xlsx");
       VARIANT empty;
       empty.vt = VT_ERROR;
       empty.scode = DISP_E_PARAMNOTFOUND;
       pWorkbooks->lpVtbl->Invoke(pWorkbooks, x.lVal, &IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &fileName, &empty, &result, NULL, NULL);
       pWorkbook = result.pdispVal;
       VARIANT sheetIndex;
       sheetIndex.vt = VT_I4;
       sheetIndex.lVal = 1;
       pWorkbook->lpVtbl->Invoke(pWorkbook, x.lVal, &IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, &sheetIndex, &result, NULL, NULL);
       pSheet = result.pdispVal;
       // 读取单元格数据等操作...
       // 释放资源...
       CoUninitialize();
       return 0;
   }

C语言读取Excel文件有多种方法可选,开发者可以根据具体需求和开发环境选择合适的方式,由于涉及到外部库和接口的使用,请确保在编译和运行代码前正确安装和配置所需的依赖项。