ms office 2007 vs 2012
近期在忙一个小项目(和同学一起搞的),在这里客户要求不但读写txt,而且可以读写excel文件,这里本以为很简单,结果。。。废话少说,过程如下:
笔者环境:win7 64+VS2012+Office2013+MFC。
说明:读写excel文件,通常包括1. ODBC 数据库实现;2.通过解析 Excel 表格文件;3.通过 OLE/COM 的几种实现方法。本文主要研究通过 OLE/COM 实现对 Excel 表格的操作。
步骤:
1.新建MFC对话框。注意勾选自动化,否则后面加入不了需要的库,导致启动服务失败等错误。有的博客说需要加入
1 if (!AfxOleInit()) 2 { 3 AfxMessageBox(IDP_OLE_INIT_FAILED); 4 return FALSE; 5 }
笔者实验发现加不加入都没有问题,如果后面有人有问题可以加入。
2. 向项目工程中添加基本的7个类( Excel 作为 OLE/COM 库插件,定义好了各类交互的接口,这些接口是跨语言的接口。 VC 可以通过导入这些接口,并通过 接口来对 Excel 的操作), 由于本文只关心对 Excel 表格中的数据的读取,主要关注7个接_ Application、 Workbooks 、 _Workbook 、Worksheets 、 _Worksheet 、 Range、Font 。
VS2012 导入 OLE/COM 组件的接口的步骤为: 项目->类向导->添加类->类型库中的MFC类 ,先选择要导入的组件所在的路径,即 Excel.exe 所在的路 径,然后再选择 要导入的 Excel 类型库中的接口。组件路径一般为C:\Program Files\Microsoft Office\Office15\EXCEL.exe;格式类似。
3. 导入之后需要 “#import "C:\\Program Files\\Microsoft Office\\Office12\\EXCEL.EXE" no_namespace”注释掉,然后添加头文 件:#include <afxdisp.h>到上面7个文件中去。
4.如果有错误error C2059双击error C2059,将VARIANT DialogBox()改成VARIANT _DialogBox()再次编译,通过!!
5.读写excel。
在对话框头文件中*Dlg.h定义变量
1 //定义接口类变量 2 CApplication app; 3 CWorkbook book; 4 CWorkbooks books; 5 CWorksheet sheet; 6 CWorksheets sheets; 7 CRange range; 8 CMyFont font; 9 CRange cols; 10 LPDISPATCH lpDisp;
a.写excel,在*Dlg.cpp里面的OnInitDialog函数添加代码:
1 //导出2 COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR); 3 if (!app.CreateDispatch(_T("Excel.Application")))4 { 5 this->MessageBox(_T("无法创建Excel应用!")); 6 return TRUE; 7 } 8 books = app.get_Workbooks(); 9 //打开Excel,其中pathname为Excel表的路径名 10 11 book = books.Add(covOptional); 12 sheets = book.get_Worksheets(); 13 sheet = sheets.get_Item(COleVariant((short)1)); //获得坐标为(A,1)和(B,1)的两个单元格 14 range = sheet.get_Range(COleVariant(_T("A1")), COleVariant(_T("B1"))); //设置单元格类容为Hello Exce 15 range.put_Value2(COleVariant(_T("Hello Excel"))); //选择整列,并设置宽度为自适应 16 cols = range.get_EntireColumn(); 17 cols.AutoFit(); 18 //设置字体为粗体 19 font = range.get_Font(); 20 font.put_Bold(COleVariant((short)TRUE)); 21 //获得坐标为(C,2)单元格 22 range = sheet.get_Range(COleVariant(_T("C2")), COleVariant(_T("C2"))); 23 //设置公式“=RAND()*100000” 24 range.put_Formula(COleVariant(_T("=RAND()*100000"))); 25 //设置数字格式为货币型 26 range.put_NumberFormat(COleVariant(_T("$0.00"))); 27 //选择整列,并设置宽度为自适应 28 cols = range.get_EntireColumn(); 29 cols.AutoFit(); 30 //显示Excel表 31 app.put_Visible(TRUE); 32 app.put_UserControl(TRUE);
结果如下
b.导入excel,同样在*Dlg的位置添加代码:
1 //导入2 COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR); 3 if (!app.CreateDispatch(_T("Excel.Application")))4 { 5 this->MessageBox(_T("无法创建Excel应用!")); 6 return TRUE; 7 } 8 books = app.get_Workbooks(); 9 //打开Excel,其中pathname为Excel表的路径名 10 lpDisp = books.Open(_T("D:\\VS2012\\Projects\\TestExcelApp2\\TestExcelApp2\\工作薄1.xlsx"),covOptional ,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional); 11 book.AttachDispatch(lpDisp); 12 sheets = book.get_Worksheets(); 13 sheet = sheets.get_Item(COleVariant((short)1)); 14 //获得坐标为(A,1)的单元格 15 range = sheet.get_Range(COleVariant(_T("A1")) ,COleVariant(_T("A1"))); 16 //获得单元格的内容 17 COleVariant rValue; 18 rValue = COleVariant(range.get_Value2()); 19 //转换成宽字符 20 rValue.ChangeType(VT_BSTR); 21 //转换格式,并输出 22 this->MessageBox(CString(rValue.bstrVal)); 23 book.put_Saved(TRUE); 24 app.Quit();
效果如下:
excel内容:
读到第一行第一列元素:
笔者只是需要读取excel的读写功能,所以只是做了这方面的实验,可以用到自己的项目中,所以共大家分享一下。有什么问题可以留言,共勉!
ms office 2007 vs 2012相关推荐
- (翻译)OpenDocument and Open XML security (OpenOffice.org and MS Office 2007)
标题:Open Document 和 Open XML安全性(OpenOffice.org and MS Office 2007) 摘要,OpenDocument 和 Open XML 都是 Offi ...
- 参加“灵狐公司”的技术年会,感受最新MS OFFICE 2007的应用价值!
12月22日,广州科贸园的国际会议中心,广州市灵狐软件工程有限公司举办2006年的技术年会, 发布其KAP 信息门户系统,其核心技术基于MS OFFICE SYSTEM 2007 ,对SHAREP ...
- 卸载ms office 2007
微软对D版的态度越来越严厉,我刚从迅雷上找的office 2007 Enterprise没用几天就被咔嚓了-- 没法用了,拆呗!才发现从控制面板上无法删除.后来从网上找到的教程上,我找到了灵感. 以下 ...
- 解决MS Office 2007找不到Office.zh-cn\*问题
运行Office 2007安装程序,没想到安装并不顺利,竟然在开始安装时就提示:"找不到Office.zh-cn\OfficeMUI.xml"文件 解决问题: 愿因:原来是Offi ...
- MS Office 2007 Project 安装方法
首先下载Project2007 Professional 中文版安装软件,然后安装: 序列号:V9MTG-3GX8P-D3Y4R-68BQ8-4Q8VD 1.使用序列码安装完毕 2.关闭所有Offic ...
- MS Office Excel 2007/2003 资料下载汇总
Excel 2007/2003教程: Excel 2007宝典 (Excel 2007 Bible) 中文PDF版 中文版Excel 2007图表宝典 中文版Excel 2007公式与函数应用宝典 E ...
- office2010计算机二级c语言,计算机二级《MS Office》模拟考试题
计算机二级是很多大学专业必考的计算机考级,为帮助同学更好备考计算机二级office科目,小编为大家分享以下试题及答案,希望对大家有帮助! 一.选择题 1设循环队列的存储空间为Q(1:35),初始状态为 ...
- 让协同工作更加轻松——Office 2007面面观之(8)
上一篇:Office 2007面面观之(7) - 提高个人工作效率<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com: ...
- 单选按钮带文字_计算机二级MS office高级应用历年真题操作题文字解析
word 1 题目 在考生文件夹下打开文档 WORD.DOCX. 某高校学生会计划举办一场"大学生网络创业交流会"的活动,拟邀请部分专家和老师给在校学生进行演讲.因此,校学生会外 ...
最新文章
- 素数环问题---深度搜索遍历
- 对象工厂PHP,php – 有一个工厂用于创建对象的好处?
- 计算机辅助语言和计算语言学关系,建构主义理论视角下计算机辅助语言学习环境对留学生学习汉语动机的影响——以广西大学泰国留学生为例-语言学及应用语言学专业论文.docx...
- 按行拼接两个txt文件的python实现
- xml操作excel
- python计算存款_python入门教程NO.8 用python写个存款利息计算器
- 60-30-012-使用-Kafka不停机删除topic数据(自动建立topic)md
- python打印不同颜色的字_Python 根据日志级别打印不同颜色的日志的方法示例
- boost noncopyable实现禁止类拷贝
- [ctfshow]web入门——命令执行(web54-web71)
- 粤嵌星计划打卡第三十二天(对象的销毁和垃圾收集机制)(java实现一个权限管理系统)
- SQL 获取当前日期上一个月的日期
- “github中文版”来了,这个神器一键帮你汉化
- win10专业版激活后变成教育版的解决方法(亲测有效)
- 细数阿里 25 个开源的前端项目,让你的 2021 路更加平坦
- Android应用: 3D旋转球
- yar php使用,php的轻量级rpc框架yar
- 【SPRD CAMERA】1 HAL层初始化流程
- linux卸载phpstudy_centos
- idea常见问题-个人而言
热门文章
- arcsoft人脸识别sdk使用方法(android版本)
- python--千年虫--将两位数变成四位数的年份、京东的购物流程----列表的使用
- 福特工人变身钢铁侠,利用外骨骼减缓其操作压力 | 应用
- Win10 edge浏览器恢复多窗口关闭提示
- linux dvd写入u盘工具,Windows 7 USB/DVD Download Tool(用于制作Windows 7启动U盘)
- weselife- my love
- Android | APP设置启动页(Java)
- Mastering_Rust(译):宏(第八章)(完+1)
- Java swing双人对战游戏
- ansa打开catia文件_ANSA下载,ANSA购买,ANSA试用,ANSA介绍,ANSA评价