c++使用odbc读写excel文件
时间: 2023-07-15 13:15:40 浏览: 118
使用ODBC读取EXCEL
4星 · 用户满意度95%
可以通过ODBC连接Excel文件,并使用SQL语句进行读写操作。
以下是一个简单的示例代码:
```cpp
#include <iostream>
#include <sql.h>
#include <sqlext.h>
int main()
{
// ODBC connection variables
SQLHENV henv = nullptr;
SQLHDBC hdbc = nullptr;
SQLRETURN retcode;
// Connect to ODBC driver
retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, SQL_IS_INTEGER);
retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
retcode = SQLConnect(hdbc, (SQLCHAR*)"Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)", SQL_NTS,
(SQLCHAR*)"Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=my_excel_file.xlsx;", SQL_NTS, NULL, NULL);
if (!SQL_SUCCEEDED(retcode))
{
std::cout << "Error connecting to Excel file." << std::endl;
return 1;
}
// Execute SQL statement
SQLHSTMT hstmt;
SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
SQLCHAR* query = (SQLCHAR*)"SELECT * FROM [Sheet1$]";
retcode = SQLExecDirect(hstmt, query, SQL_NTS);
if (SQL_SUCCEEDED(retcode))
{
// Fetch data
SQLCHAR name[256];
SQLINTEGER age;
while (SQLFetch(hstmt) == SQL_SUCCESS)
{
SQLGetData(hstmt, 1, SQL_C_CHAR, name, sizeof(name), NULL);
SQLGetData(hstmt, 2, SQL_C_LONG, &age, 0, NULL);
std::cout << name << " " << age << std::endl;
}
}
else
{
std::cout << "Error executing SQL statement." << std::endl;
}
// Disconnect from ODBC driver
SQLDisconnect(hdbc);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return 0;
}
```
此代码连接到名为 `my_excel_file.xlsx` 的Excel文件,并从名为 `Sheet1` 的工作表中读取数据。你需要替换这些值以适应你的实际情况。
注意,你需要使用适当的ODBC驱动程序来连接Excel文件。在上面的示例代码中,使用了Microsoft Excel ODBC驱动程序。
此外,你需要使用适当的SQL语句来读取和写入Excel文件中的数据。在上面的示例代码中,使用了 `SELECT` 语句来读取数据。你可以使用INSERT、UPDATE和DELETE语句来写入数据。
阅读全文