预期实现结果:

C++可对Excel表精确进行某一行某一列的增加、修改、删除、查询数据

预演环境:

Window7+VS2013+office2013(32位)、2010(64位)、2007(64位)2003(64位)+WPS2016(位)

预演方法:

1、 ODBC方式访问

2、 通过解析Excel表格文件

3、 通过OLE/COM方式访问

可行性分析:

2003版本office办公软件创建Excel表的后缀.xls 而以后的高版本创建表后缀为.xlsx。是用新的基于XML的压缩文件格式取代了其目前专有的默认文件格式,在传统的文件名扩展名后面添加了字母x(即.docx取代.doc、.xlsx取代.xls,等等),使其占用空间更小,可以向下兼容xls。

这样造成以前通过ODBC方式访问和通过解析Excel表格文件的方法代表无法解析高版本的xlsx文件,因此选择OLE/COM方式访问可以一劳永逸的解决所有的版本问题。**

OLE/COM方式访问步骤:

1. 新建MFC工程

2. 配置工程,添加组件类接口

导入OLE/COM组件的接口的步骤为:项目->类向导->添加类->类型库中的MFC类,先选择要导入的组件所在的路径,即Excel.exe所在的路径。导入接口中所用到类方法接口如下图所示:


3. 将各个导入的头文件“#import “C:\Program Files\Microsoft Office\Office12\EXCEL.EXE” no_namespace中部分注释掉。在:#include <、afxdisp.h>加入上面7个头文件文件

4.代码实现

  1. 在对话框Dlg.h定义接口变量

    CApplication app;
    CWorkbook book;CWorkbooks books;
    CWorksheet sheet;
    CWorksheets sheets;
    CRange range;
    CRange cols;
    LPDISPATCH lpDisp;
    
  2. 对话框中拖拽两个按钮,分别命名为导入和导出

  3. 实现导入导出的功能

    导入:

    void CCpp_ExcleDemoDlg::OnBnClickedButton1(){COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    if (!app.CreateDispatch(_T("Excel.Application")))
    {this->MessageBox(_T("无法创建Excel应用!"));
    }books = app.get_Workbooks();//打开Excel,其中pathname为Excel表的路径名  lpDisp = books.Open(_T("D:\\工作簿1.xlsx"), covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional);book.AttachDispatch(lpDisp);sheets = book.get_Worksheets();sheet = sheets.get_Item(COleVariant((short)1));//获得坐标为(A,1)的单元格 range = sheet.get_Range(COleVariant(_T("A1")), COleVariant(_T("A1")));//获得单元格的内容 COleVariant rValue;rValue = COleVariant(range.get_Value2());//转换成宽字符  rValue.ChangeType(VT_BSTR);//转换格式,并输出 this->MessageBox(CString(rValue.bstrVal));book.put_Saved(TRUE);app.Quit();
    }
    

导出:

    void CCpp_ExcleDemoDlg::OnBnClickedButton2(){COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);if (!app.CreateDispatch(_T("Excel.Application"))){this->MessageBox(_T("无法创建Excel应用!"));}books = app.get_Workbooks();//打开Excel,其中pathname为Excel表的路径名  book = books.Add(covOptional);sheets = book.get_Worksheets();sheet = sheets.get_Item(COleVariant((short)1));  //获得坐标为(A,1)和(B,1)的两个单元格 range = sheet.get_Range(COleVariant(_T("A1")), COleVariant(_T("B1")));  //设置单元格类容为Hello Excerange.put_Value2(COleVariant(_T("Clear Excel Demo")));  //选择整列,并设置宽度为自适应 cols = range.get_EntireColumn();cols.AutoFit();//获得坐标为(C,2)单元格 range = sheet.get_Range(COleVariant(_T("C2")), COleVariant(_T("C2")));//设置公式“=RAND()*100000”range.put_Formula(COleVariant(_T("=RAND()*100000")));//设置数字格式为货币型  range.put_NumberFormat(COleVariant(_T("$0.00")));//选择整列,并设置宽度为自适应  cols = range.get_EntireColumn();cols.AutoFit();//显示Excel表app.put_Visible(TRUE);app.put_UserControl(TRUE);}

Demo代码功能概述:

Demo实现对某一行某一列数据进行读取、准确输入某一行某一列

OLE/COM方式编程注意事项

有错误error C2059双击error C2059,将VARIANT DialogBox()改成VARIANT _DialogBox()再次编译,则可以通过

附上Demo的下载地址http://download.csdn.net/detail/it_ds/9762897

C++ 操作Excel相关推荐

  1. python excel操作单元格_python 操作excel表格的方法

    说明:由于公司oa暂缺,人事妹子在做考勤的时候,需要通过几个excel表格去交叉比对员工是否有旷工或迟到,工作量大而且容易出错. 这时候it屌丝的机会来啦,花了一天时间给妹子撸了一个自动化脚本. 1. ...

  2. C#在客户端和服务端操作Excel文件

    一.在客户端把数据导入到Excel文件步骤 1.创建Excel application对象,打开或生成Excel文件 //服务端创建StringBuilder对象     System.Text.St ...

  3. C#如何在Form中嵌入并且操作Excel表格

    网上比较多讲述如何操作excel表的文章,但都是启动excel的窗口来打开excel数据文件.有时候需要把excel表嵌入到自己程序的form中,给客户一个不用切换窗口的操作界面,似乎更好.这在vc中 ...

  4. c#操作Excel整理总结

    大家好,这是我在工作中总结的关于C#操作Excel的帮助类,欢迎大家批评指正! using System; using System.Collections.Generic; using System ...

  5. C#操作excel(多种方法比较)

    我们在做excel资料的时候,通常有以下方法. 一.导入导出excel常用方法: 1.用查询表的方式查询并show在数据集控件上. 代码 public static string strCon = & ...

  6. python连接excel存放数据_有了这篇python操作Excel学习笔记,以后储存数据 办公很轻松!...

    最近在做一些数据处理和计算的工作,因为数据是以.csv格式保存的,因此刚开始直接用Excel来处理.但是做着做着发现重复的劳动其实并没有多大的意义,于是就想着写个小工具帮着处理.以前正好在一本书上看到 ...

  7. openpyxl 操作 Excel表的格基本用法

    在本教程中,将Python3和openpyxl库一起使用来操作 Excel 表格. 本文将介绍如下操作: 如何在内存中创建工作簿 如何从工作簿中检索.创建.复制.移动和删除工作表 如何从文件创建工作簿 ...

  8. java操作excel常用的两种方式

    转载自:https://www.cnblogs.com/wangyang108/p/6030420.html Excel是我们平时工作中比较常用的用于存储二维表数据的,JAVA也可以直接对Excel进 ...

  9. 使用VC来操作Excel表格的源码

    下面的代码段是关于使用VC来操作Excel表格的的代码,应该对小伙伴们也有用. if (CoInitialize(NULL) != 0) { AfxMessageBox("初始化COM支持库 ...

  10. C# 操作Excel之旁门左道 [ C# | Excel ]

    一.目的 从数据库导出数据到Excel中并锁定部分数据不让修改.这里以学生成绩表为例, 学生编号.学生姓名.学生成绩 三个字段从数据库提取,并锁定,老师评价栏在导出后可输入. 二.实现 1. 制作Ex ...

最新文章

  1. vim插件的安装方式 -- vim注释插件和doxygen函数注释生成插件-ctrlp插件-tabular等号对齐 插件...
  2. Edit Control读取与写入踩坑实例与使用方法
  3. 还剩10天,赶紧登下百度网盘,拯救你的2T存储空间吧!
  4. C# 7中函数多值返回_转自InfoQ
  5. [Windows][C#][.NET][WPF]基于ArcFace2.0+红外双目摄像头的活体检测
  6. ios AFNetworking 有用篇
  7. nginx-rtmp常用指令
  8. python frame如何置顶_Python tkinter frame父窗口小部件排列列
  9. 阿里云服务器ECS按ctrl+alt+delete无法登录
  10. 解决JAVA_HOME nor the JRE_HOME environment variable is defined
  11. 通过CrawlSpider对招聘网站进行整站爬取(拉勾网实战)
  12. python二进制文件解析_python – 解析二进制文件的正则表达式?
  13. 数据苦库中的几种规范
  14. pscad4.5 matlab,pscad4.2|pscad(电力系统仿真软件)下载v4.2 免费版 附安装教程 - 欧普软件下载...
  15. 极路由1 1s 2 3 刷机 / 恢复 /强刷教程
  16. mysql dateofweek_日历表-月的周数
  17. 互联网日报 | 中国移动香港实现5G独立组网;嫦娥五号顺利进入环月轨道;钟慧娟成全球白手起家女首富...
  18. 洛谷P1567 统计天数
  19. M洞察|“MOBA”还是“MMO”?2023上半年热门手游大盘点来了,拯救你的游戏荒
  20. ISO 26262 标准小解

热门文章

  1. 电脑辐射,电脑辐射危害大 五妙招正确防辐射
  2. carton num_Carton先生–世界上第一个卡通系列MadeWithUnity
  3. 2、AP上线的那些事儿(1)capwap建立过程、设备初始化以及二层上线
  4. 【CSS】886- 你该知道的字体 font-family
  5. snail mock_HTML5 2D游戏开发,Snail Bait简介
  6. 美的美少年暑期实习面经
  7. GeoHash代码实现--java
  8. flink GROUPING SETS多维度聚合、设置Table state 到期时间
  9. Nginx服务器启停命令
  10. 第一次独立使用大型无人船记录日志—第2天