MFC - Excel操作简介(基于VS2010)
一、添加与 excel 操作相关的头文件
项目 -> 类向导,在右上方有一个下拉栏,选择其中的 类型库中的mfc类(t),即可看到下图所示界面,选择“文件”选项,然后在下方的位置选项中添加本地文件,本人电脑中的excel是安装在 c 盘的,故文件目录为:c:\program files\microsoft office\office14\excel.exe。
添加了 excel.exe 后,可以看到一系列接口,选择其中的: _application、_workbook、_worksheet、workbooks、worksheets、font、range 并添加,然后在主程序中添加其头文件:
#include "capplication.h" #include "cworkbook.h" #include "cworkbooks.h" #include "cworksheet.h" #include "cworksheets.h" #include "crange.h" #include "cfont0.h"
逐次打开上述头文件,并将其中的 “ #import "c:\\program files\\microsoft office\\office14\\excel.exe" no_namespace ” 这句话给屏蔽掉,不然会报错,无法编译成功。这样之后,编译还是不能通过,会出现以下报错:
点击 warning 来到报错处,在 dialogbox() 前面加上下划线 "_",即 "_dialogbox()" 即可。
二、创建并保存一个 excel
直接上代码先:
void cexcel_exampledlg::savedatatoexcel() { cstring cellnum; capplication m_excelapp; // excel 应用程序接口 cworkbook m_excelbook; // 工作簿 cworkbooks m_excelbooks; // 工作簿集合 cworksheet m_excelsheet; // 工作表 cworksheets m_excelsheets; // 工作表集合 crange m_excelrange; // 用于对单元格进行操作 crange m_excelcols; cfont0 m_excelfont; // 用于字体操作 // 获取系统时间并保存为 cstring 类型 cstring timestr; // 获取系统时间 systemtime systime; getlocaltime(&systime); cstring m_savefilepath; // 保存路径 timestr.format(l"_%4d.%2d.%2d_%2d.%2d",systime.wyear , systime.wmonth , systime.wday , systime.whour , systime.wminute); m_savefilepath = _t("e:\\workplace\\excelexample") + timestr + _t(".xlsx"); cstring str; for(int i = 0;i <20;i++) { str.format(l"%d",i); valuearray1.add(str); str.format(l"%d",2 * i); valuearray2.add(str); str.format(l"%d",3 * i); sumarray.add(str); } colevariant covtrue((short)true); colevariant covfalse((short)false); colevariant covoptional((long)disp_e_paramnotfound,vt_error); if(!m_excelapp.createdispatch(_t("excel.application"))) { afxmessagebox(_t("创建excel失败"),mb_ok | mb_iconwarning); return; } m_excelbooks = m_excelapp.get_workbooks(); // 获取一个工作簿集合 m_excelbook = m_excelbooks.add(covoptional); // 添加一个工作簿 m_excelsheets = m_excelbook.get_sheets(); // 获取一个工作表集合 m_excelsheet = m_excelsheets.get_item(colevariant((short)1)); // 获取一个工作表 // 向 excel 中添加数据 // 选择工作表中 a1-a1 单元格区域 m_excelrange = m_excelsheet.get_range(colevariant( _t("a1")), colevariant(_t("a1"))); m_excelrange.put_value2(colevariant( _t("变量名1"))); // 设置 a1 内容 m_excelcols = m_excelrange.get_entirecolumn(); // 选择整列 m_excelcols.put_horizontalalignment(colevariant((long)-4108)); // 设置居中对齐 // 选择工作表中 b1-b1 单元格区域 m_excelrange = m_excelsheet.get_range(colevariant( _t("b1")), colevariant(_t("b1"))); m_excelrange.put_value2(colevariant( _t("值"))); // 设置 b1 内容 m_excelcols = m_excelrange.get_entirecolumn(); // 选择整列 m_excelcols.put_horizontalalignment(colevariant((long)-4108)); // 设置居中对齐 // 选择工作表中 c1-c1 单元格区域 m_excelrange = m_excelsheet.get_range(colevariant( _t("c1")), colevariant(_t("c1"))); m_excelrange.put_value2(colevariant( _t("变量名2"))); // 设置 c1 内容 m_excelcols = m_excelrange.get_entirecolumn(); // 选择整列 m_excelcols.put_horizontalalignment(colevariant((long)-4108)); // 设置居中对齐 // 选择工作表中 d1-d1 单元格区域 m_excelrange = m_excelsheet.get_range(colevariant( _t("d1")), colevariant(_t("d1"))); m_excelrange.put_value2(colevariant( _t("值"))); // 设置 d1 内容 m_excelcols = m_excelrange.get_entirecolumn(); // 选择整列 m_excelcols.put_horizontalalignment(colevariant((long)-4108)); // 设置居中对齐 // 选择工作表中 e1-e1 单元格区域 m_excelrange = m_excelsheet.get_range(colevariant( _t("e1")), colevariant(_t("e1"))); m_excelrange.put_value2(colevariant( _t("和"))); // 设置 e1 内容 m_excelcols = m_excelrange.get_entirecolumn(); // 选择整列 m_excelcols.put_horizontalalignment(colevariant((long)-4108)); // 设置居中对齐 for(int i = 0;i < 20;i++) { cellnum.format(l"%d",i+2); cellnum = _t("a") + cellnum; // 依次选择工作表中 a 列 的单元格 m_excelrange = m_excelsheet.get_range(colevariant(cellnum), colevariant(cellnum)); m_excelrange.put_value2(colevariant(_t("a"))); // 设置 a 列内容 cellnum.format(l"%d",i+2); cellnum = _t("b") + cellnum; // 依次选择工作表中 b 列 的单元格 m_excelrange = m_excelsheet.get_range(colevariant(cellnum), colevariant(cellnum)); m_excelrange.put_value2(colevariant(valuearray1[i])); // 设置 b 列内容 cellnum.format(l"%d",i+2); cellnum = _t("c") + cellnum; // 依次选择工作表中 c 列 的单元格 m_excelrange = m_excelsheet.get_range(colevariant(cellnum), colevariant(cellnum)); m_excelrange.put_value2(colevariant(_t("b"))); // 设置 c 列内容 cellnum.format(l"%d",i+2); cellnum = _t("d") + cellnum; // 依次选择工作表中 d 列 的单元格 m_excelrange = m_excelsheet.get_range(colevariant(cellnum), colevariant(cellnum)); m_excelrange.put_value2(colevariant(valuearray2[i])); // 设置 d 列内容 cellnum.format(l"%d",i+2); cellnum = _t("e") + cellnum; // 依次选择工作表中 e 列 的单元格 m_excelrange = m_excelsheet.get_range(colevariant(cellnum), colevariant(cellnum)); m_excelrange.put_value2(colevariant(sumarray[i])); // 设置 e 列内容 } m_excelapp.put_visible(false); // 不显示 excel 表格 m_excelapp.put_usercontrol(false); // 设置表格状态为用户不可控制 m_excelbook.savecopyas(colevariant(m_savefilepath)); // 保存excel表格 m_excelbook.put_saved(true); // 释放对象 m_excelbooks.releasedispatch(); m_excelbook.releasedispatch(); m_excelsheets.releasedispatch(); m_excelsheet.releasedispatch(); m_excelrange.releasedispatch(); m_excelapp.quit(); // 退出 excel 程序,注意这里要先退出,后释放 m_excelapp.releasedispatch(); }
这段代码创建了一个 excel ,然后向 excel 中添加了 5 列 21 行的数据并保存到本地,最终所得到的 excel 如下:
整个代码不复杂,设置好一切后向 excel 中添加数据即可,添加完数据后,记得保存表格,并释放相应的资源,否则程序结束后会有一个 excel 进程驻留在内存中,这样重复运行程序时会出错。
上一篇: 机器学习实战(笔记)------------KNN算法
下一篇: 我家猫喜欢舔我手
推荐阅读
-
django框架基于模板 生成 excel(xls) 文件操作示例
-
MFC - Excel操作简介(基于VS2010)
-
基于.net EF6 MVC5+WEB Api 的Web系统框架总结(4)-Excel文件读、写操作
-
.Net Core下基于NPOI对Excel、Word操作封装
-
C++对Mysql数据库的访问查询(基于Mysql5.0的API,vs2010中操作
-
PHP基于COM的Excel操作类(PHP5)_PHP教程
-
PHP基于COM的Excel操作类(PHP5)
-
php操作excel文件 基于phpexcel_php技巧
-
MFC - Excel操作简介(基于VS2010)
-
php操作excel文件 基于phpexcel_php技巧