首先,我们要明白的是用VC编程实现访问Excel数据有很多方法,这里我们使用的是通过ODBC来访问Excel表格的,也就是说,VC将Excel表格当作数据库来处理。
其次,既然是数据库,那么,就需要建立一个与该库对应的dsn,而且在建立dsn之前,首先要确定已经安装了Excel的驱动(已安装office套件),你只需要在控制面板的ODBC选项卡中查看即可。

最后,要访问数据库中的表格,就要先打开该表格,如此,就需要一个与之对应的RecordSet,并且你应该熟悉一些关于SQL语句的基本操作,接下来就是像操作数据库一样操作Excel文件中的数据。

获取Excel驱动接口代码如下:

CString CTTDMDlg::GetExcelDriver( )
{wchar_t szBuf[2001];wchar_t excl[] = _T("Excel");WORD cbBufMax = 2000;WORD cbBufOut;wchar_t *pszBuf = szBuf;CString sDriver;// 获取已安装驱动的名称(函数在odbcinst.h里)if (!SQLGetInstalledDrivers(szBuf, cbBufMax, &cbBufOut))return _T("");// 检索已安装的驱动是否有Excel...// AfxMessageBox(CString(pszBuf));do{if(wcsstr(pszBuf, excl) != 0){//发现 !sDriver = CString(pszBuf);break;}wchar_t ze = {'\0'};pszBuf = wcschr(pszBuf, ze) + 1;}while (pszBuf[1] != '\0');return sDriver;
}

接下来我们根据Excel文件名来读取数据,代码如下:(代码操作部分需要根据你自己的数据结构进行相应调整)

void CTTDMDlg::OnBnClickedBTNRead()
{// TODO: Add your control notification handler code hereCDatabase database;CString sSql;CString sItem1, sItem2,sItem3;CString sDriver;CString sDsn;CString sFile,sPath;                              //获取主程序所在路径,存在sPath中GetModuleFileName(NULL, sPath.GetBufferSetLength(MAX_PATH+1), MAX_PATH);sPath.ReleaseBuffer();int nPos;nPos=sPath.ReverseFind ('\\');sPath=sPath.Left (nPos);sFile = sPath + _T("\\ReadExcel.xls");          // 将被读取的Excel文件名// 检索是否安装有Excel驱动 "Microsoft Excel Driver (*.xls)" sDriver = GetExcelDriver();if (sDriver.IsEmpty())// 没有发现Excel驱动{AfxMessageBox(_T("没有安装Excel驱动!"));return;}// 创建进行存取的字符串sDsn.Format(_T("ODBC;DRIVER={%s};DSN='';DBQ=%s"), sDriver, sFile);TRY{database.Open(NULL, false, false, sDsn); // 打开数据库(既Excel文件)CRecordset recset(&database);sSql = _T("SELECT 学号,姓名,班级 FROM [Student$] ORDER BY 学号");        // 执行查询语句recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly);while (!recset.IsEOF())// 获取查询结果{//读取Excel内部数值recset.GetFieldValue(_T("学号"), sItem1);recset.GetFieldValue(_T("姓名"), sItem2);recset.GetFieldValue(_T("班级"), sItem3);m_ListCtrl.AddString( sItem1 + "       "+sItem2+ "       "+sItem3);recset.MoveNext();// 移到下一行}database.Close();     // 关闭数据库                   }CATCH(CDBException, e){AfxMessageBox(_T("数据库错误: ") + e->m_strError);}END_CATCH;
}

注意,这里的表名Student是Excel中对应的Sheet名,并且需要写成[Student$],如果不这样写可能会提示你“数据库引擎找不到Student对象”

这样一来Excel数据读取部分就完成了,关于数据写入与更新相信大家就不会陌生了,只要我们打开了数据库连接,组合相应的SQL语句,然后执行便可以插入、更新数据了。

插入数据如下:

// 插入数值
sSql.Format(_T("INSERT INTO Student (学号,姓名,记录) VALUES ('%s','%s','1')"), str1, str2);
database.ExecuteSQL(sSql);

以我的一个点名程序为背景的部分源码如下,大家需要学习如何连接数据库并如何操作:

CDatabase database;
CString sDriver;
CString sExcelFile,sPath;
CString sDsn;
CString sSql;
//获取主程序所在路径,存在sPath中
GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);
sPath.ReleaseBuffer();
int nPos;
nPos=sPath.ReverseFind('\\');
sPath=sPath.Left(nPos);
sExcelFile = sPath + _T("\\缺勤记录.xls");          // 要建立的Excel文件
//Excel驱动 "Microsoft Excel Driver (*.xls)"
sDriver = GetExcelDriver();if(PathFileExists(sExcelFile))
{//AfxMessageBox(_T("Get file"));//要写入的文件存在时的操作
}
else <span style="font-family: Arial, Helvetica, sans-serif;">//要写入的文件不存在时的操作</span>
{//AfxMessageBox(_T("no file"));TRY{// 创建进行存取的字符串sSql.Format(_T("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s"),sDriver, sExcelFile, sExcelFile);if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )// 创建数据库 (既Excel表格文件){// 创建表结构(学号、姓名、记录)sSql = _T("CREATE TABLE Student (学号 INT,姓名 TEXT,记录 INT)");database.ExecuteSQL(sSql);// 插入数值sSql = _T("INSERT INTO Student (学号,姓名,记录) VALUES ('32212116','陈佩','0')");database.ExecuteSQL(sSql);for(UINT i=0; i<=vNArriveStu.size(); i++){CString StuNo = vNArriveStu.at(vNArriveStu.size()-1);vNArriveStu.pop_back();//删除最后一个数据LVFINDINFO info;info.flags = LVFI_PARTIAL|LVFI_STRING;info.psz = StuNo;int nIndex = m_ListCtrlShow.FindItem(&info);CString str1 = m_ListCtrlShow.GetItemText(nIndex, 0);CString str2 = m_ListCtrlShow.GetItemText(nIndex, 1);// 插入数值sSql.Format(_T("INSERT INTO Student (学号,姓名,记录) VALUES ('%s','%s','1')"), str1, str2);database.ExecuteSQL(sSql);}}      // 关闭数据库database.Close();AfxMessageBox(_T("Excel文件写入成功!"));}CATCH(CDBException, e){AfxMessageBox(_T("数据库错误: ") + e->m_strError);}END_CATCH;
}

同理,数据的更新部分只需组合以下语句:

//更新已有记录
sSql.Format(_T("UPDATE Student SET 记录=%d where 学号=%s"), count, str1);
database.ExecuteSQL(sSql);  

更新的连接部分更上面的插入代码是一样的,只是执行操作换成更新的这两句即可......

文章原地址:https://blog.csdn.net/cp32212116/article/details/40211859

VC操作excel(创建表格 查找 插入数据)相关推荐

  1. Linux命令行执行sqlite3命令创建表格,插入数据,获取数据

    Linux命令行执行sqlite3命令创建表格,插入数据,获取数据 文章目录 Linux命令行执行sqlite3命令创建表格,插入数据,获取数据 1-进入sqlite3 2-创建数据库 3-创建表 4 ...

  2. MySQL Workbench 使用MySQL语法“创建表格以及插入数据”

    我们的MySQL Workbench创建表格以及插入数据共有两种方式.一种方式:通过我们自己进行手动创建表格以及插入数据.另一种方式:就是使用我们的MySQL的语法,进行创建表格以及添加数据. 下面的 ...

  3. mysql 插入_Mysql中创建表格及插入数据

    学习笔记 [数据库相关概念] Q:什么是数据库和关系数据库. A:数据库是存储数据合集的"仓库".关系数据库是保存多张表和多张表之间的关系的数据库.关键字段将多张表"联结 ...

  4. VC操作excel表格

    VC操作excel表格(一) 1.The require files When you start to program in VC, you must have the lib files of E ...

  5. VC 操作excel

    简介 通过本文及配套示例源码你可以更加灵活的控制Excel表格文件,其中包括创建新Excel文件.写入表格数据.读取表格数据(包括对原建Excel文件自已手工添加的行.列数据的准确读取),删除已有Ex ...

  6. VC操作Excel收集

    VC操作Excel的方法(2007-01-05 21:18:45)      A:从classwizard中add class处from type library,去office的安装目录下引入exc ...

  7. VC操作Excel文件编程相关内容总结

    最近在做个数据库程序,因为有些数据用户要求导出到Excel文件显示(需要报给其他单位).所以查阅了一下相关的VC的Excel编程操作,总结一下吧:(所有资料来源于网络) 利用VC操作Excel的方法至 ...

  8. JAVA操作pdf——创建表格

    JAVA操作pdf--创建表格 一.前言 在实习的时候遇到了需要将查询到的数据构建成为PDF的情况,于是在网上查找到了相关的Java操作pdf的教程,看到大部分的文章都是使用ITextPdf操作的,于 ...

  9. VC操作Excel之基本操作

    最近由于工作需要,不得不操作Excel,包括基本的数据输入输出.字体设置.颜色设置.单元格的合并.填充色的设置,当然还包括图表的生成以及渐近线的操作等.折腾了许久,项目终于完成了^_^.现在将学习操作 ...

最新文章

  1. python基本语法总结-Python基本语法总结(三) 常用内置函数
  2. python3.6使用教程-如何使用python编程《python3.6 教程》
  3. python从入门到实践_Python编程从入门到实践日记Day32
  4. ITM_win_agentCPU内存占用较高
  5. webgl坐标转换_OpenGL/WebGL顶点坐标变换过程简介
  6. 后端把Long类型的数据传给前端,前端可能会出现精度丢失的情况,以及解决方案...
  7. C#使用七牛云存储上传下载文件、自定义回调
  8. AdWords是什么
  9. h3cIP和TCP抓包分析实验
  10. FR的控件CSS样式
  11. 程序员英文简历范例(前端)
  12. 图像处理专业术语中英文对照(不断补充中)
  13. matlab linux x11 display,Xming安裝 + X11-Forwarding使用
  14. 谜底是计算机的谜语英语,英语谜语大全及答案
  15. 燕山大学C++实验报告
  16. MATLAB 绘制sinc函数的简单代码
  17. 电脑桌面没有此电脑图标如何处理?
  18. exchange 2010 脱机地址簿操作
  19. Google镜像代理地址:
  20. openstack--3--控制节点安装配置keystone

热门文章

  1. 智能红外遥控器(三):红外学习温湿度读取
  2. 多层神经网络的局部最小值与全局最小值——The problem of convexity
  3. 理论计算机科学方向,计算机科学与技术专业考研方向:计算机软件与理论
  4. class balanced loss pytorch 实现
  5. java常用设计模式11—适配器模式
  6. openstack RPC通信
  7. Codesys配置电子凸轮连接虚轴
  8. 怎么旋转PDF页面方向?可以只旋转一页吗
  9. 正大国际期货:为什么外盘期货顺势交易这么难
  10. Win10使用局域网实现手机访问电脑共享文件