如何用VC读取Excel表格中的数据详细介绍
2016-01-25 16:43
162 查看
原文:http://www.cppblog.com/wrhwww/archive/2012/03/02/129421.html
首先,我们要明白的是,VC是通过ODBC来访问Excel表格的,也就是说,VC将Excel表格,当作数据库来处理。当然了,也可以通过读以tab键隔开的文件来处理这样的文件,但是,我还是更加愿意用读取数据库的方式来访问Excel表格。第二,既然是数据库,那么,就需要建立一个与该库对应的dsn,这个,而且,在建立dsn之前,首先要确定,已经安装了Excel的驱动。第三,要访问数据库中的表格,就要先打开该表格,如此,就需要一个与之对应的RecordSet。如此,有如下代码:
void CRWExcel::ReadFromExcel()
{
CDatabase database;
CString sSql;
CString sItem1, sItem2;
CString sDriver;
CString sDsn;
CString sFile = "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
database.Open(NULL, false, false, sDsn);
CRecordset recset(&database);
// 设置读取的查询语句.demo.xls并非文件名,需要在excel中进行//设置,具体文章最后有讲
sSql = "SELECT Age, Name FROM DEMO.XLS";
// 执行查询语句,打开表格
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;
}
需要注意的是,我们对我们的Excel表格需要进行一些处理,需要先选定我们要读取的数据,之后,选择插入>>名字>>之后,在输入框中输入我们在select语句中用到的表名。第二,需要设置列名,为我们选定部分的最前面的一行的数据。
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(1296) | 评论(0) | 转发(0) |
0
上一篇:JSON-C Example(从字符串解析属性)
下一篇:android 开发 NDK相关问题
相关热门文章
softRoCE/RDMA 安装与测试...
PyQt5系列教程(六)如何让界面...
欢迎这可如何是好嘛在ChinaUni...
jsp嵌套
centos 7如何获取完整内核源码...
test123
编写安全代码——小心有符号数...
使用openssl api进行加密解密...
一段自己打印自己的c程序...
sql relay的c++接口
linux dhcp peizhi roc
关于Unix文件的软链接
求教这个命令什么意思,我是新...
sed -e "/grep/d" 是什么意思...
谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议
首先,我们要明白的是,VC是通过ODBC来访问Excel表格的,也就是说,VC将Excel表格,当作数据库来处理。当然了,也可以通过读以tab键隔开的文件来处理这样的文件,但是,我还是更加愿意用读取数据库的方式来访问Excel表格。第二,既然是数据库,那么,就需要建立一个与该库对应的dsn,这个,而且,在建立dsn之前,首先要确定,已经安装了Excel的驱动。第三,要访问数据库中的表格,就要先打开该表格,如此,就需要一个与之对应的RecordSet。如此,有如下代码:
void CRWExcel::ReadFromExcel()
{
CDatabase database;
CString sSql;
CString sItem1, sItem2;
CString sDriver;
CString sDsn;
CString sFile = "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
database.Open(NULL, false, false, sDsn);
CRecordset recset(&database);
// 设置读取的查询语句.demo.xls并非文件名,需要在excel中进行//设置,具体文章最后有讲
sSql = "SELECT Age, Name FROM DEMO.XLS";
// 执行查询语句,打开表格
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;
}
需要注意的是,我们对我们的Excel表格需要进行一些处理,需要先选定我们要读取的数据,之后,选择插入>>名字>>之后,在输入框中输入我们在select语句中用到的表名。第二,需要设置列名,为我们选定部分的最前面的一行的数据。
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(1296) | 评论(0) | 转发(0) |
0
上一篇:JSON-C Example(从字符串解析属性)
下一篇:android 开发 NDK相关问题
相关热门文章
softRoCE/RDMA 安装与测试...
PyQt5系列教程(六)如何让界面...
欢迎这可如何是好嘛在ChinaUni...
jsp嵌套
centos 7如何获取完整内核源码...
test123
编写安全代码——小心有符号数...
使用openssl api进行加密解密...
一段自己打印自己的c程序...
sql relay的c++接口
linux dhcp peizhi roc
关于Unix文件的软链接
求教这个命令什么意思,我是新...
sed -e "/grep/d" 是什么意思...
谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议
相关文章推荐
- JSON-C Example(从字符串解析属性)
- 高并发学习之使用Condition实现三个线程轮转&阻塞缓冲区
- error C2143: syntax error : missing ';' before 'type'
- Protocol Buffers 的 ActionScript 3 编译器
- 通宵教室
- Java异常处理--将try/catch区段置于循环之外
- pthread_create创建线程后必须使用join或detach释放线程资源[内存泄漏]
- JVM学习笔记十一 之 编译期优化和运行期优化
- 各类 C++ hashmap 性能测试总结
- float和double类型的内存分布
- 更好更快更高效解析JSON说明[json-c]
- C++结构体实例和类实例的初始化
- windows socket select非阻塞实例
- 在非控制台程序中打印出printf
- [VC]setsockopt 设置socket 详细用法(超时、非阻塞等)
- 如何将动态链接库(C++ DLL)中的printf显示在其被调用的程序控制台上
- Android NDK Build 参数
- appledoc格式
- 【慕课笔记】U1 类和对象 第3节 如何使用JAVA中的对象
- cocos2dx-lua捕获用户touch事件的几种方式