C++读写excel文件(一)—— 用ODBC读写
来源:互联网 发布:阿里巴巴农村淘宝网址 编辑:程序博客网 时间:2024/05/23 17:16
转自http://blog.csdn.net/yukin_xue/article/details/11203979
优点: 代码少,结构简单,好理解。
缺点: 貌似只有先通过ODBC写后的excel内容,才能通过ODBC读出来,如果随便拿个excel文件用ODBC来读,不成功。会报错:
Warning: ODBC Success With Info, 驱动程序的 SQLSetConnectAttr 失败
State:IM006,Native:0,Origin:[Microsoft][ODBC 驱动程序管理器]
Microsoft Jet 数据库引擎找不到对象'demo'。请确定对象是否存在,并正确地写出它的名
称和路径。
State:S0002,Native:-1305,Origin:[Microsoft][ODBC Excel Driver]
所以,如果有写excel的需求,用odbc操作excel还是很方便的,但是如果仅有读excel的需求,ODBC的方式不合适,不知道是不是我使用不当,反正目前为止没达到我的目的。
下面是 通过ODBC直接读、写Excel表格文件,
摘抄自:http://wenwen.soso.com/z/q146346329.htm
首先,应确保ODBC中已安装有Excel表格文件的驱动"MICROSOFT EXCEL DRIVER (*.XLS)"。然后,可根据下面步骤进行:
1. 在StdAfx.h文件中加入:
include <afxdb.h>
include <odbcinst.h>
2. 通过ODBC直接创建Excel文件(暂定文件名:Demo.xls)
//创建并写入Excel文件
void CRWExcel::WriteToExcel()
{
CDatabase database;
CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // Excel安装驱动
CString sExcelFile = "c:\\demo.xls"; // 要建立的Excel文件
CString sSql;
TRY
{
// 创建进行存取的字符串
sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",sDriver, sExcelFile, sExcelFile);
// 创建数据库 (既Excel表格文件)
if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
{
// 创建表结构(姓名、年龄)
sSql = "CREATE TABLE demo (Name TEXT,Age NUMBER)";
database.ExecuteSQL(sSql);
// 插入数值
sSql = "INSERT INTO demo (Name,Age) VALUES ('徐景周',26)";
database.ExecuteSQL(sSql);
sSql = "INSERT INTO demo (Name,Age) VALUES ('徐志慧',22)";
database.ExecuteSQL(sSql);
sSql = "INSERT INTO demo (Name,Age) VALUES ('郭徽',27)";
database.ExecuteSQL(sSql);
}
// 关闭数据库
database.Close();
}
CATCH_ALL(e)
{
TRACE1("Excel驱动没有安装: %s",sDriver);
}
END_CATCH_ALL;
}
3. 通过ODBC直接读取Excel文件(暂定文件名:Demo.xls)
// 读取Excel文件
void CRWExcel::ReadFromExcel()
{
CDatabase database;
CString sSql;
CString sItem1, sItem2;
CString sDriver;
CString sDsn;
CString sFile = "c:\\demo.xls"; // 将被读取的Excel文件名
// 检索是否安装有Excel驱动 "Microsoft Excel Driver (*.xls)"
sDriver = GetExcelDriver();
if (sDriver.IsEmpty())
{
// 没有发现Excel驱动
AfxMessageBox("没有安装Excel驱动!");
return;
}
// 创建进行存取的字符串
sDsn.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s", sDriver, sFile);
TRY
{
// 打开数据库(既Excel文件)
database.Open(NULL, false, false, sDsn);
CRecordset recset(&database);
// 设置读取的查询语句.
sSql = "SELECT Name, Age "
"FROM demo "
"ORDER BY Name ";
// 执行查询语句
recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly);
// 获取查询结果
while (!recset.IsEOF())
{
//读取Excel内部数值
recset.GetFieldValue("Name ", sItem1);
recset.GetFieldValue("Age", sItem2);
// 移到下一行
recset.MoveNext();
}
// 关闭数据库
database.Close();
}
CATCH(CDBException, e)
{
// 数据库操作产生异常时...
AfxMessageBox("数据库错误: " + e->m_strError);
}
END_CATCH;
}
// 获取ODBC中Excel驱动
CString CRWExcel::GetExcelDriver()
{
char szBuf[2001];
WORD cbBufMax = 2000;
WORD cbBufOut;
char *pszBuf = szBuf;
CString sDriver;
// 获取已安装驱动的名称(涵数在odbcinst.h里)
if (!SQLGetInstalledDrivers(szBuf, cbBufMax, &cbBufOut))
return "";
// 检索已安装的驱动是否有Excel...
do
{
if (strstr(pszBuf, "Excel") != 0)
{
//发现 !
sDriver = CString(pszBuf);
break;
}
pszBuf = strchr(pszBuf, '\0') + 1;
}
while (pszBuf[1] != '\0');
return sDriver;
}
- C++读写excel文件(一)—— 用ODBC读写(by yukin_xue)
- C++读写excel文件(一)—— 用ODBC读写
- C语言通过ODBC读写Excel表格文件(ODBC)
- C语言通过ODBC读写Excel表格文件
- C#EXCEL文件读写
- [C++] Excel文件读写
- 用Java and JDBC-ODBC读写Excel文件
- 直接通过ODBC读写Excel表格文件
- 直接通过ODBC读写Excel表格文件
- 直接通过ODBC读写Excel表格文件
- 直接通过ODBC 读写Excel表格文件
- 直接通过ODBC读写Excel表格文件
- 直接通过ODBC读写Excel表格文件
- 通过ODBC读写Excel表格文件
- 直接通过ODBC读写Excel表格文件
- 直接通过ODBC读写Excel表格文件
- 直接通过ODBC读写Excel表格文件
- 直接通过ODBC读写Excel表格文件
- [shell]bash-parallel
- 基础总结篇之九:Intent应用详解
- Android内容提供者(一)读取系统联系人
- I.MX6Q(TQIMX6Q/TQE9)学习笔记——新版BSP之eMMC移植
- Spring文档学习--异常处理(Handling exceptions)以Shiro为例
- C++读写excel文件(一)—— 用ODBC读写
- 详细记录python的range()函数用法
- 自定义标签
- 使用Java开发高性能网站需要关注的那些事儿
- Selenium自动化测试多浏览器依次被测试方法
- ios 防止按钮快速点击造成多次响应的避免方法
- 快速中值滤波
- Android Studio上传Library库到JCenter,并同步到Maven Central
- javascript中this关键字的使用