VS2010 MFC读取Excel文件中数据
前段时间写个工具需要从Excel文件中读取数据,Excel表格数据列数为确定值,行数不确定,从网上搜了些方法尝试,最终达到目的,总结如下:
1. 新建一个基于对话框的MFC应用程序
2. 添加Excel相关类
打开类向导,添加类下拉框选择类型库中的MFC类,来源选择注册表(不容易出错),可用的类型库选择"Microsoft Excel ..."(根据Excel的版本有所不同);接口选择:_Application,_WorkSheet,_WorkBook,Range,WorkSheets,WorkBooks;添加6个必要的类CApplication,CWorkbook,CWorksheet,CRange,CWorkbooks,CWorksheets
3. 添加完成后,找到相关头文件,注释或删除:
//#import "D:\\Program Files (x86)\\Microsoft Office\\Office14\\EXCEL.EXE" no_namespace
在stdafx.h中添加:
#include "CApplication.h"
#include "CRange.h"
#include "CWorkbook.h"
#include "CWorkbooks.h"
#include "CWorksheet.h"
#include "CWorksheets.h"
4. 编译出现错误:
1>e:\vs2010_project\demo\mfcexcel\crange.h(335): warning C4003: “DialogBoxW”宏的实参不足
1>e:\vs2010_project\demo\mfcexcel\crange.h(335): error C2059: 语法错误:“,”
解决方法:定位错误信息,在CRange类中将DialogBox()改为_DialogBox()
VARIANT _DialogBox(){VARIANT result;InvokeHelper(0xf5, DISPATCH_METHOD, VT_VARIANT, (void*)&result, NULL);return result;}
5. 获取Excel文件路径全名(包括文件名)
添加一个打开文件按钮和显示路径的编辑框,按钮单击消息处理函数:
void COfflineDlg::OnBnClickedButtonOpenfile()
{// TODO: 在此添加控件通知处理程序代码CFileDialog file(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, _T("EXCEL文件(*.xls;*.xlsx)|*.xls;*.xlsx||"),AfxGetMainWnd()); if(file.DoModal()==IDOK) { strPath=file.GetPathName(); GetDlgItem(IDC_EDIT_FilePath)->SetWindowText(strPath);}
}
strPath为CString类型的对话框成员变量,用于存储路径
6. 读取Excel中数据
添加一个读取数据按钮,按钮单击消息处理函数:
void COfflineDlg::OnBnClickedButtonReaddata()
{// TODO: 在此添加控件通知处理程序代码if("" == strPath){theApp.ShowInfo(_T("请先选择文件"));return;}GetDlgItem(IDC_BUTTON_ReadData)->EnableWindow(FALSE);theApp.ShowInfo(_T("读取数据..."));CApplication app; //Excel程序CWorkbooks books; //工作簿集合CWorkbook book; //工作簿CWorksheets sheets; //工作表集合 CWorksheet sheet; //工作表CRange range; //使用区域COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); if (!app.CreateDispatch(_T("Excel.Application"))) { MessageBox(_T("Error!Creat Excel Application Server Fail!")); exit(1); } books.AttachDispatch(app.get_Workbooks(),true); book.AttachDispatch(books.Add(_variant_t(strPath)));//获取选择的Excel文件sheets.AttachDispatch(book.get_Worksheets(),true);//获取文件中的所有sheetsheet.AttachDispatch(sheets.get_Item(_variant_t("sheet1")),true);//获取sheet1区域vstrCycleSets.clear();vstrCmdSeque.clear();vstrSendData.clear();vstrExpectData.clear();vstrTimeout.clear();vstrCheck.clear();vstrCycleCnt.clear();CString str;bool bExit = false;for(int irow=2;!bExit;irow++){for(int icolumn=1;icolumn<8;icolumn++){range.AttachDispatch(sheet.get_Cells(),true);//获取sheet1所有的单元格,重置当前区域为A1range.AttachDispatch(range.get_Item (COleVariant((long)irow),COleVariant((long)icolumn)).pdispVal);//获取单元格switch(icolumn){case 1: str = range.get_Value2(); if(str.IsEmpty()){bExit = true; break;}vstrCycleSets.push_back(str); break;case 2: str = range.get_Value2();vstrCmdSeque.push_back(str);break;case 3: str = range.get_Value2();str.Replace(" ", "");vstrSendData.push_back(str);break;case 4: str = range.get_Value2();str.Replace(" ", "");vstrExpectData.push_back(str);break;case 5: str = range.get_Value2();vstrTimeout.push_back(str);break;case 6: str = range.get_Value2();vstrCheck.push_back(str);break;case 7: str = range.get_Value2();vstrCycleCnt.push_back(str);break;default: ;}if(bExit){break;}}}range.ReleaseDispatch();//释放对象sheet.ReleaseDispatch();sheets.ReleaseDispatch();book.ReleaseDispatch(); books.ReleaseDispatch(); app.ReleaseDispatch(); app.Quit();//退出Excel程序if(!vstrCycleSets.empty()){theApp.ShowInfo(_T("读取数据成功"));}else{theApp.ShowInfo(_T("读取数据失败"));}GetDlgItem(IDC_BUTTON_ReadData)->EnableWindow(TRUE);
}
我读取的Excel表格数据列数固定为7,数据不确定所以行数不确定,第一行为表头,所以从第二行A2单元格开始读,通过Ai是否为空来判断数据是否读完。采用容器来保存数据对象比较方便,容器定义为对话框成员变量:
//存储Excel读取的数据vector<CString> vstrCycleSets;vector<CString> vstrCmdSeque;vector<CString> vstrSendData;vector<CString> vstrExpectData;vector<CString> vstrTimeout;vector<CString> vstrCheck;vector<CString> vstrCycleCnt;
至此,就完成了从Excel中读取数据。
我们都是站在巨人的肩膀上,参考资料:
http://blog.csdn.net/u013507368/article/details/42143913
http://blog.csdn.net/jason___bourne/article/details/39643419
http://blog.csdn.net/fkzh2651/article/details/12185611
http://blog.csdn.net/tc297520702/article/details/20745457
http://blog.csdn.net/wangzhiyang925/article/details/37572695
VS2010 MFC读取Excel文件中数据相关推荐
- [转]VS2010+MFC解析Excel文件中数据
本文转自:http://www.vcfans.com/2010/08/vs2010-mfc-excel-file-in-the-data-analysis.html 前两天折腾一个小功能,需求是解析E ...
- python 读取excel文件 效率 时间 格式_python读取Excel文件中的时间数据
在使用python读取Excel文件中的时间格式,碰到的时间格式转换问题: 读取这样的表格: 输出这样的数据结果: 然而这样的结果却不是我们想要的,我们需要的是这样的结果: 1.安装python官方库 ...
- Python读取excel文件中的数据,绘制折线图、散点图
https://www.cnblogs.com/liulinghua90/p/9935642.html https://blog.csdn.net/qq_32458499/article/detail ...
- MFC读取Excel文件+数据处理+写入Excel
在日常编程的过程中,我们经常会遇到需要读写文件的操作,当然,最好的选择是数据库来进行读写,但是由于数据库使用环境的要求(比如某些数据库要求必须安装数据库软件后才能使用),同时,要进行数据库操作需要对S ...
- python读取excelsheet-python实现读取excel文件中所有sheet操作示例
本文实例讲述了python实现读取excel文件中所有sheet操作.分享给大家供大家参考,具体如下: 表格是这样的 实现把此文件所有sheet中 标识为1 的行,取出来,存入一个字典.所有行组成一个 ...
- python打开excel的函数-Python读取excel文件中带公式的值的实现
在进行excel文件读取的时候,我自己设置了部分直接从公式获取单元格的值 但是用之前的读取方法进行读取的时候,返回值为空 import os import xlrd from xlutils.copy ...
- python公式_Python读取excel文件中带公式的值的实现
在进行excel文件读取的时候,我自己设置了部分直接从公式获取单元格的值 但是用之前的读取方法进行读取的时候,返回值为空 import os import xlrd from xlutils.copy ...
- python 读excel中的sheet_python读取excel文件中所有sheet表格
sales: store: """ (1)用load_workbook函数打开excel文件,返回一个工作簿对象 (2)用工作簿对象获取所有的sheet (3)第一个fo ...
- matlab excel操作,Matlab读取excel文件里数据的操作流程
亲们入手Matlab软件过程里会读取excel文件里数据吗?下面小编就提供了Matlab读取excel文件里数据的操作流程,有需要的朋友一起来看看吧. 读取sheet1中的所有数据 以03版excel ...
最新文章
- 手动添加JAR包到本地Maven仓库
- 201671010406 丁家辉《英文文本统计分析》结对项目报告
- 简述使用REST API 的最佳实践
- Three.js 新旧版本区别
- 拜托!这才是分布式系统CAP的正确打开方式!
- oracle1007错误,【问题处理】偶遇ORA- 01075: you are currently logged on错误
- (caffe入门)windows caffe 之 mnist 训练
- idea java9以及以上 出现找不到class的情况
- 9月1日学习内容整理:装饰器带参数,装饰器嵌套
- arraylist线程安全吗_面试官:用过ThreadLocal吗?它保证线程安全的原理是啥?
- 闪迪内存卡软件测试,闪迪存储卡怎么样
- 韦东山嵌入式学习视频完整目录
- 微星GE60有线网卡Qualcomm Atheros Bigfoot Killer E2200 ethernet card在ubuntu下无法找到驱动的解决办法...
- Unrecognized Windows Sockets error: 10106: create解决方案
- oracle能用hql吗,使用HQL查询日期,Oracle报“Invalid number”
- 思科6509 引擎720-3BXL 更换风扇造成设备重启
- 业精于勤荒于嬉,行成于思毁于随
- 【C语言】八大排序算法
- 11款免费的Web安全测试工具
- 书籍推荐:《职场潜伏心理学:全世界最权威的88个心理学定律》