博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MFC通过sql访问excel的方法
阅读量:5871 次
发布时间:2019-06-19

本文共 2177 字,大约阅读时间需要 7 分钟。

1.首先检查安装的驱动中是否有excel,代码如下:

CString CAbcd1Dlg::GetExcelDriver()
{
  TCHAR sBuf[1000], *p=sBuf;
  WORD sBufMax=1000, sBufOut;
  if (!SQLGetInstalledDrivers(sBuf, sBufMax, &sBufOut))
    return "";
  CString strDriver;
  do{
    if(_tcsstr(p,_T("Excel"))!=0)
    {
      strDriver=CString(p);
      break;
    }
    p=_tcschr(p,_T('\0') )+1;
  }while(p[1]!=_T('\0'));

  return strDriver;

  }
  此函数的返回值即为excel驱动设备名称

2.读取访问excel表数据,先定义一个表,操作如下:

  运行Microsoft Excel , 打开要操作的工作簿, 左键拖拽,选取要定义成为表的区域,
  从菜单中选择'插入 '->'名称'->'定义','定义名称'对话框出现后,键入表的名字,
  例如:test,保存退出。
  这样,你就可以在VC中,使用象SELECT * FROM test这样的SQL语句了
  CString sD;
  //m_strDriver为 1 中获取的excel设备驱动名称,
  //strExcelFullFileName是excel表的全名
  sD.Format(_T("ODBC;DRIVER={%s};DSN='';DBQ=%s"), m_strDriver, strExcelFullFileName);
  CDatabase database;
  //打开数据库(即Excel文件)
  if (0 == database.Open(NULL, false, false, sD))
  {
    CString strFailInfo;
    strFailInfo.Format(_T("%s database 打开失败"),strExcelName);
    AfxMessageBox(strFailInfo);
    return;
  }
  CRecordset recset(&database);
  //设置读取的查询语句
  CString ql(_T("SELECT 字段1,字段2 FROM test"));
  //执行查询语句
  recset.Open(CRecordset::forwardOnly,ql,CRecordset::readOnly);
  遍历每一条,获取每一个字段
  while(!recset.IsEOF())
  {
    CString str1, str2;
    recset.GetFieldValue(_T("字段1"), str1);
    recset.GetFieldValue(_T("字段2"), str2);
    recset.MoveNext();//移到下一条记录
  }
3.写excel
  CString sSql;
  //m_strDriver为 1 中获取的excel设备驱动名称
  //strExcelFileName 为 写入的excel名称
  sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",m_strDriver, strExcelFileName,   strExcelFileName);
  //打开数据文件
  if (0 == m_dbWriteToExcel.OpenEx(sSql,CDatabase::noOdbcDialog)){
    return false;
  }
  写入表头
  sSql = "CREATE TABLE Exceldemo (字段1 TEXT, 字段2 TEXT)";
  m_dbWriteToExcel.ExecuteSQL(sSql);
  //写入数据
  str1.Replace(_T("'"),_T("''"));
  str2.Replace(_T("'"),_T("''"));

  CString strSql;

  strSql.Format(_T("INSERT INTO Exceldemo (字段1, 字段2) VALUES ('%s', '%s ')"),str1, str2);
  m_dbWriteToExcel.ExecuteSQL(strSql);
  备注:
    1.由于sql中插入的字段值要用''包起来,如果字段值中有'则会出现冲突,在sql中俩个'代表一个'
    2.'%s ' 后面的'号前有个空格,经过测试,'紧挨着%s会出现一些奇怪的情况。

转载于:https://www.cnblogs.com/sancong/p/6292243.html

你可能感兴趣的文章
乌克兰基辅一世遗修道院起火 现场火光照亮夜空
查看>>
[iOS 10 day by day] Day 2:线程竞态检测工具 Thread Sanitizer
查看>>
Centos/Ubuntu下安装nodejs
查看>>
关于浏览器的cookie
查看>>
Hyper-V 2016 系列教程30 机房温度远程监控方案
查看>>
国内先进的智能移动广告聚合平台-KeyMob聚合
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
PHP - 如何打印函数调用树
查看>>
js闭包
查看>>
寒假。3.3.G - Common Child (最大公共子序)
查看>>
设计模式学习笔记--原型模式
查看>>
.Net 通过MySQLDriverCS操作MySQL
查看>>
JS Cookie
查看>>
ubuntu Unable to locate package sysv-rc-conf
查看>>
笔记:认识.NET平台
查看>>
cocos2d中CCAnimation的使用(cocos2d 1.0以上版本)
查看>>
【吉光片羽】短信验证
查看>>
MacBook如何用Parallels Desktop安装windows7/8
查看>>
gitlab 完整部署实例
查看>>