假日快要结束了。带着沉重的心情写下之前关于MFC与Excel文件交互的总结。

因为VS的版本号不同可能在操作上有些差异。所以在此指明下本篇文章的project环境为VS2013,也建议大家用最新的。

说到程序对于Excel的操作,应该不能算是什么新需求了。方法也有好几种,诸如利用office提供的接口、开源码之类的。本文在查了一些资料之后选择了实现起来较为反便的一种。事实上现的方法基本上全然照抄的这篇文章的,假设看本篇不大明确的能够去看看。

參考的文章说。“踏破铁鞋无觅处。得来费死了工夫”。然而进过了博主的努力,后人须要做的也就是看一看,抄一抄就完事了。开源的力量伟大至极,本篇将发扬博主的精神。在整理内容的同一时候,写出一个Demoproject提供下载,假设懒得做这些工作的人仅仅须要下载了这个project就能够直接用起来了(亲測能够),project在最后面给出。

原文地址

以下開始主要内容

第一步:创建一个空的MFC对话框project

第二步:下拉VS菜单条的“项目”项。选择加入类。在弹出对话框中选中“TypeLib中的MFC类”,点击加入。弹出“从类型库加入类向导”对话框。

第三步:弹出的对话框例如以下图,“从下面来源加入类”中有两个选项,假设选择的是“注冊表”,在“可用的类型库”中选择“Microsoft Excel
15.0 Object Library<1.8>”(Office版本号不同可能有些许差异,这个是Office2013)。假设选择的是“文件”,则"位置"选择Office安装路径下的EXCEL.EXE,本人32位Office的默认安装,路径为“C:\Program Files (x86)\Microsoft Office\Office15\EXCEL.EXE”。上面两个选项达到的效果是一样的,仅仅是路径不同而已,做完效果例如以下:

第四步:选中“接口”中的“_Application”,“_WorkSheet”,“_WorkBook”,“WorkSheets”,“WorkBooks”,“Range”这几项。放到右边去,点击完毕。例如以下图:

第五步:做完第四步后,project中会多出几个导入类的头文件“CApplication.h”,“CWorkSheet.h”,“CWorkBook.h”,“CWorkSheets.h”,“CWorkBooks.h”,“CRange.h”。将每个头文件中面的都有的第一句代码“#import
"C:\\Program Files (x86)\\Microsoft Office\\Office15\\EXCEL.EXE" no_namespace”(路径可能不同)都凝视掉。

例如以下图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpeGluaHVt/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

第六步:既然有头文件,自然就要包括这些头文件啦,在须要调用的文件头写入例如以下代码:

#include "CApplication.h"
#include "CRange.h"
#include "CWorkbook.h"
#include "CWorkbooks.h"
#include "CWorksheet.h"
#include "CWorksheets.h"

第七步:这个时候按理说环境已经是搭建好了,可是点击编译还是会报出语法错误,幸好前文提到的博客也给出了解决方法,定位到"CRange,h",将

VARIANT DialogBox()
{
VARIANT result;
InvokeHelper(0xf5, DISPATCH_METHOD, VT_VARIANT, (void*)&result, NULL);
return result;
}

中的DialogBox改为_DialogBox,如今编译就没有问题了。接下来调用就能够了,调用代码例如以下:

CApplication app;
CWorkbooks books;
CWorkbook book;
CWorksheets sheets;
CWorksheet sheet;
CRange range;
LPDISPATCH lpDisp;
COleVariant vResult;
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
if (!app.CreateDispatch(L"Excel.Application"))
{
AfxMessageBox(L"无法启动Excelserver!");
return;
}
books.AttachDispatch(app.get_Workbooks());
CString path = L"demo.xlsx";//文件路径 TCHAR szPath[MAX_PATH];//获得当前运行路径
GetModuleFileName(NULL, szPath, MAX_PATH);
CString PathName(szPath);
PathName=PathName.Left(PathName.ReverseFind(_T('\\')) + 1); lpDisp = books.Open(PathName+path, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional); book.AttachDispatch(lpDisp);//得到Workbook
sheets.AttachDispatch(book.get_Worksheets());//得到Worksheets lpDisp = book.get_ActiveSheet();//得到当前活跃sheet,假设有单元格正处于编辑状态中,此操作不能返回。会一直等待
sheet.AttachDispatch(lpDisp); //读取第rows行、第cols列单元格的值
/*假设遍历则重复运行这段代码并推断界限*/
int rows = 1, cols = 2;
range.AttachDispatch(sheet.get_Cells());
range.AttachDispatch(range.get_Item(COleVariant((long)rows), COleVariant((long)cols)).pdispVal);
vResult = range.get_Value2();
CString data;
if (vResult.vt == VT_BSTR)//字符串
{
data = vResult.bstrVal;
}
else if (vResult.vt == VT_R8)//8字节的数字
{
data.Format(L"%.0f", vResult.dblVal);
}
else if(vResult.vt==VT_EMPTY)//单元格空的
{
data = "";
}
MessageBox(data);
/*假设遍历则重复运行这段代码并推断界限*/ //释放对象
books.Close();
app.Quit();// 退出
range.ReleaseDispatch();
sheet.ReleaseDispatch();
sheets.ReleaseDispatch();
book.ReleaseDispatch();
books.ReleaseDispatch();
app.ReleaseDispatch();

OK,到此便实现了Excel数据的读取,至于创建和写入也几乎相同,以后实用到再加入上来。

project下载(VS2013)

MFC 与Excel文件的交互操作的更多相关文章

  1. Python Excel文件的读写操作(xlwt xlrd xlsxwriter)

    转:https://www.cnblogs.com/ultimateWorld/p/8309197.html Python语法简洁清晰,作为工作中常用的开发语言还是很强大的(废话). python关于 ...

  2. Excel文件的导出操作

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  3. 用Python对excel文件的简单操作

    #-*-coding:utf8-*- import xlrd #代开excel文件读取数据 data = xlrd.open_workbook("C:\\Users\\hyl\\Deskto ...

  4. 使用openpyxl实现excel文件的读取操作

    1.环境准备 python3环境.安装openpyxl模块 2.excel文件数据准备 3.为方便直接调用,本代码直接封装成类 from openpyxl import load_workbook c ...

  5. pandas对Excel文件的读写操作

    1.将Excel数据读为dataframe 1.1 直接读取 df = pd.read_excel('data.xlsx') 1.2 根据sheet索引 xls = pd.ExcelFile('dat ...

  6. python对excel文件的读写操作

    import xlrd,xlwt data = xlrd.open_workbook('a.xlsx') #读 table = data.sheets()[0] data_list = [] data ...

  7. 【C#】C#操作Excel文件(转)

    实现C#与Excel文件的交互操作,实现以下功能: 1.DataTable 导出到 Excel文件 2.Model数据实体导出到 Excel文件[List<Model>] 3.导出数据到模 ...

  8. Python 操作 MS Excel 文件

    利用 Python 对 Excel 文件进行操作需要使用第三方库: openpyxl,可执行 pip install openpyxl 进行安装 1. 导入 openpyxl 模块 导入 openpy ...

  9. Python【操作EXCEL文件】

    #Python中,对EXCEL文件的读写操作需要安装.导入几个第三方模块#xlrd模块:只能读取EXCEL文件,不能进行写操作#xlwt模块:只能进行写操作,但是不能是覆盖写操作(也就是修改Excel ...

随机推荐

  1. WinForm上传文件,下载文件

    上传文件: 使用OpenFileDialog控件选择文件, 具体代码示例: private void btnUpLoadPic_Click(object sender, EventArgs e) { ...

  2. js隐藏与显示回到顶部按钮

    window.onscroll = function () { if (document.documentElement.scrollTop + document.body.scrollTop > ...

  3. 1350 Taxi Cab Scheme DAG最小路径覆盖

    对于什么是DAG最小路径覆盖以及解题方法在我的另外的博客已经有了.http://www.cnblogs.com/Potato-lover/p/3980470.html 此题的题意: 公交车(出租车)车 ...

  4. MemCached总结二:数据管理指令

    管理memcached中的数据包括添加(add).修改(set).删除(delete)及获取(get)等操作. 命令格式: 1.set set userId 0 0 5 12345 STORED ge ...

  5. RGB_D_开发征程(使用Kinect)

    学习历程依此为纲! Kinect学习资料: kinect和openNI开发资料汇总:http://blog.csdn.net/chenli2010/article/details/6887646 原始 ...

  6. 分层、链式分析、url、联系的长度

    分层.链式分析.url.联系的长度. 分层结构符合软件处理的工具链性和步骤性: 分层的每一次都是一个节点或步骤: 链式结构普遍存在于自然界,比如食物链: 联系是普遍存在的,不只是两个事物间的联系,而且 ...

  7. 详解优动漫PAINT中的图层模式

    使用优动漫PAINT绘制漫画或者插画的时候,在其新建画布区域有一个基本颜色模式的选项,分别包括彩色模式.灰度模式和黑白位图模式,那么这三个模式有什么区别呢,我们在绘图的时候应该如何选择呢? 彩色模式: ...

  8. 创建一个dynamics CRM workflow (一) - Introduction to Custom Workflows

    Workflow: Use this process to model and automate real world business processes. These processes can ...

  9. struts中日期处理以及文件下载

    日期处理 对于jsp提交的基本数据类型和日期格式为yyyy-MM-dd的自动转换为相应的 对于其它的日期格式需要自定义转换器 局部类型转换器 1,写转换器类(继承StrutsTypeConverter ...

  10. 获取淘宝sessionkey 实时保存

    <?php/* * To change this license header, choose License Headers in Project Properties. * To chang ...