Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1684801
  • 博文数量: 347
  • 博客积分: 9328
  • 博客等级: 中将
  • 技术积分: 2680
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-29 23:45
文章分类

全部博文(347)

文章存档

2016年(1)

2013年(4)

2012年(207)

2011年(85)

2010年(50)

分类: C/C++

2012-12-07 14:28:02

首先,我们要明白的是,VC是通过ODBC来访问Excel表格的,也就是说,VC将Excel表格,当作数据库来处理。当然了,也可以通过读以tab键隔开的文件来处理这样的文件,但是,我还是更加愿意用读取数据库的方式来访问Excel表格。
第二,既然是数据库,那么,就需要建立一个与该库对应的dsn,这个,而且,在建立dsn之前,首先要确定,已经安装了Excel的驱动。
第三,要访问数据库中的表格,就要先打开该表格,如此,就需要一个与之对应的RecordSet。如此,有如下代码:

  1. void CRWExcel::ReadFromExcel()
  2. {
  3.       CDatabase database;
  4.       CString sSql;
  5.       CString sItem1, sItem2;
  6.       CString sDriver;
  7.       CString sDsn;
  8.       CString sFile = "Demo.xls";// 将被读取的Excel文件名
  9.                                      
  10.     // 检索是否安装有Excel驱动 "Microsoft Excel Driver (*.xls)"
  11.       sDriver = GetExcelDriver();
  12.       if (sDriver.IsEmpty())
  13.       {
  14.           // 没有发现Excel驱动
  15.           AfxMessageBox("没有安装Excel驱动!");
  16.           return;
  17.       }
  18.       // 创建进行存取的字符串
  19.       sDsn.Format("ODBC;DRIVER={%s};DSN='''';DBQ=%s", sDriver, sFile);

  20.       TRY
  21.       {
  22. // 打开数据库,建立与这个Excel对应的Database
  23.           database.Open(NULL, false, false, sDsn);
  24.           CRecordset recset(&database);
  25. // 设置读取的查询语句.demo.xls并非文件名,需要在excel中进行//设置,具体文章最后有讲
  26.           sSql = "SELECT Age, Name FROM DEMO.XLS";
  27.       // 执行查询语句,打开表格
  28.           recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly);
  29.           // 获取查询结果
  30.           while (!recset.IsEOF())
  31.           {
  32.               //读取Excel内部数值
  33.               recset.GetFieldValue("Name ", sItem1);
  34.               recset.GetFieldValue("Age", sItem2);
  35.               // 移到下一行
  36.               recset.MoveNext();
  37.           }
  38.           // 关闭数据库
  39.           database.Close();
  40.       }
  41.       CATCH(CDBException, e)
  42.       {
  43.           // 数据库操作产生异常时...
  44.           AfxMessageBox("数据库错误: " + e->m_strError);
  45.       }
  46.       END_CATCH;
  47. }

需要注意的是,我们对我们的Excel表格需要进行一些处理,需要先选定我们要读取的数据,之后,选择插入>>名字>>之后,在输入框中输入我们在select语句中用到的表名。第二,需要设置列名,为我们选定部分的最前面的一行的数据。
阅读(2482) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~