MFC导出到Excel
软件:vs2013
程序功能:将ListControl内容导出到Excel里
步骤:
第一步:创建基于对话框的MFC工程
第二步:添加库、添加Excel类库
在工程名上右键,选择“添加”—“类”(或者点击菜单栏的“项目”->“添加类”),选择“TypeLib中的MFC类”(MFC Class From TypeLib)
类来源选“注册表”,在可用的类型库中选择“Microsoft Excel 12.0 Object Library<1.6>”在接口列表框中选择需要的类,在此,我们选择_Application,_Workbook,Worksheet,Range,Workbooks,Worksheets这六个就可以了。
但是有的接口里没东西,例如:
怎么办呢?不急。可以选“文件”,找到EXCEL.EXE的位置,来进行添加:(我的位置在:D:\office\Office14\EXCEL.EXE)
第三步:修改头文件
分别将加进来的六个头文件上面的“#import "C:\\Program Files\\Microsoft Office\\OFFICE11\\EXCEL.EXE" no_namespace”注释掉。
第四步:编译,修改错误
编译,会出现两个错误:
…\crange.h(335): warning C4003: “DialogBoxW”宏的实参不足
…\crange.h(335): error C2059: 语法错误:“,”
双击错误提示,定位在错误行,
VARIANT DialogBox()
{
VARIANT result;
InvokeHelper(0xf5, DISPATCH_METHOD, VT_VARIANT, (void*)&result, NULL);
return result;
}
将该函数名“DialogBox()”前面加“_”下划线,即“_DialogBox()”,这样就可以编译成功了。
第五步:删除对话框内容,添加对应控件
1.在对话框中添加列表控件,关联变量m_Grid,并设置显示为报表样式:
打开工具箱选择List Control(列表控件),移到合适位置后,更改属性,鼠标右击选择“属性”,View-->Report,Border-->True
添加变量:类别Control,变量名m_Grid
2.在对话框中添加“导出”按钮
第六步:代码(可以直接将代码复制运行下)
添加头文件
#include "CWorkbook.h" //管理单个工作表
#include "CWorkbooks.h" //统管所有的工作簿
#include "CApplication.h" //Excel应用程序类,管理我们打开的这整个Excel应用
#include "CRange.h" //区域类,对EXcel的大部分操作都要和这个打招呼
#include "CWorksheet.h" //工作薄中的单个工作表
#include "CWorksheets.h" //统管当前工作簿中的所有工作表
在初始化函数中,先初始化列表(C导出到ExcleDlg::OnInitDialog)红框里为添加的代码位置
//设置列表视图的扩展风格m_Grid.SetExtendedStyle(LVS_EX_FLATSB //扁平风格显示滚动| LVS_EX_FULLROWSELECT //允许整行选中| LVS_EX_HEADERDRAGDROP //允许整列拖动| LVS_EX_ONECLICKACTIVATE //单击选中项| LVS_EX_GRIDLINES //画出网格线);//设置表头m_Grid.InsertColumn(0, _T("编号"), LVCFMT_LEFT, 80, 0);m_Grid.InsertColumn(1, _T("姓名"), LVCFMT_LEFT, 80, 1);m_Grid.InsertColumn(2, _T("所属部门"), LVCFMT_LEFT, 80, 2);//向列表中插入数据int count = 0;m_Grid.InsertItem(count, _T("001"));//行m_Grid.SetItemText(count, 1, _T("张一"));m_Grid.SetItemText(count++, 2, _T("销售部"));m_Grid.InsertItem(count, _T("002"));m_Grid.SetItemText(count, 1, _T("张二"));m_Grid.SetItemText(count++, 2, _T("研发部"));m_Grid.InsertItem(count, _T("003"));m_Grid.SetItemText(count, 1, _T("张三"));m_Grid.SetItemText(count++, 2, _T("采购部"));m_Grid.InsertItem(count, _T("004"));m_Grid.SetItemText(count, 1, _T("张四"));m_Grid.SetItemText(count, 2, _T("宣传部"));
编写按钮的响应函数:
CString strFile = _T("E:\\Test.xls");COleVariantcovTrue((short)TRUE),covFalse((short)FALSE),covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);CApplication app;CWorkbooks books;CWorkbook book;CWorksheets sheets;CWorksheet sheet;CRange range;CFont font;if (!app.CreateDispatch(_T("Excel.Application"))){MessageBox(_T("创建失败!"));return;}books = app.get_Workbooks();book = books.Add(covOptional);sheets = book.get_Worksheets(); //得到bookssheet = sheets.get_Item(COleVariant((short)1));//得到全部Cellsrange.AttachDispatch(sheet.get_Cells());CString sText[] = { _T("编号"), _T("姓名"), _T("所属部门") };for (int setnum = 0; setnum < m_Grid.GetItemCount() + 1; setnum++) //GetItemCount()列表的里面的条目数量, 横着的 行{for (int num = 0; num < 3; num++){if (!setnum){range.put_Item(_variant_t((long)(setnum + 1)), variant_t((long)(num + 1)),_variant_t(sText[num]));}else{range.put_Item(_variant_t((long)(setnum + 1)), _variant_t((long)(num + 1)),_variant_t(m_Grid.GetItemText(setnum - 1, num)));//GetItemText()获取第setnum-1行,num列的文本}}}//保存book.SaveCopyAs(COleVariant(strFile)); //SaveCopyAs在strFile路径下保存为指定格式.xlsx的文件book.put_Saved(true); //将Workbook的保存状态设置为已保存,即不让系统提示是否人工保存app.put_Visible(true); //设置表可见性//释放对象range.ReleaseDispatch();sheet.ReleaseDispatch();sheets.ReleaseDispatch();book.ReleaseDispatch();books.ReleaseDispatch();app.ReleaseDispatch();app.Quit();
最终结果如下:
按下导出按钮后
MFC导出到Excel相关推荐
- 使用MFC自动化操作Excel文档
使用MFC自动化操作Excel文档 项目中要用到MFC操作Excel文件,在网上搜的结果,有把Excel当数据库处理的,也有直接操作Excel的,最终在MSDN上看到的结果,测试后觉得好用些. 使用基 ...
- java导出为excel文件_java导出数据到excel文件
有的时候,将一些有用的数据导出到excel是很有必要的.比如说,我现在在做一个学校的在线教学平台,有一个需求是:将学生成绩导出到excel文件中去. 那怎样实现用java导出数据到excel文件呢?? ...
- ftl模板导出excel_freemarker导出复杂Excel
原文: freemarker导出复杂Excel date: 2017-04-20 12:39:04 [TOC] 序言 用Freemarker做Excel导出确实很容易. 但是导出复杂Excel, 例如 ...
- Gridview导出到Excel,Gridview中的各类控件,Gridview中删除记录的处理
Asp.net 2.0中新增的gridview控件,是十分强大的数据展示控件,在前面的系列文章里,分别展示了其中很多的基本用法和技巧(详见< ASP.NET 2.0中Gridview控件高级技巧 ...
- 将数据库查询结果导出成Excel表格
使用Java代码,从数据库中获取结果集,将结果集导出成Excel表格形式. 从数据库中查询学生表所有数据,将其导出成Excel表格,点击查看学生表表结构 . package com.test.test ...
- 百度指数常见php框架,怎么导出数据到excel表格-如何将百度指数数据导出到Excel表格...
如何将百度指数数据导出到Excel表格 第一步:打开CAD.CAD命令行输入"Li"."选择对象"选需要提取坐标的多段线.回车. 第二步:将CAD文本框中的数据 ...
- mysql excel 命令行_MySQL 命令行数据导出到 Excel
显示行号 | 选择喜欢的代码风格 默认 GitHub Dune LakeSide Plateau Vibrant Blue Eighties Tranquil 将 MySQL 的数据导出 Excel, ...
- R语言将多个dataframe导出到excel的多个表单(sheet)实战
R语言将多个dataframe导出到excel的多个表单(sheet)实战 目录 R语言将多个dataframe导出到excel的多个表单(sheet)实战
- R语言使用broom包将回归模型(线性回归、逻辑回归、比例风险回归)的结果整理成dataframe并导出到excel等文件中:基于mtcars和colon数据集
R语言使用broom包将回归模型(线性回归.逻辑回归.比例风险回归)的结果整理成dataframe并导出到excel等文件中:基于mtcars和colon数据集 目录
最新文章
- php 变更 obj,PHP: 不向后兼容的变更 - Manual
- 计算机论文数据建模怎么写,如何撰写建模论文?
- navigationBar 颜色修改
- php dirname(__FILE__)
- [leetcode] Bulb Switcher
- 关联规则算法php,科学网—加权关联规则权值的计算 - 叶文菁的博文
- GELU的两个初等函数近似是怎么来的?
- JDBC连接数据库及其执行操作
- java简单词法分析器(源码下载)
- Spark连接hive
- 一个想法:利用VHD部署系统
- 【Java程序设计】类与对象的基本概念(上)
- python爬虫学习之XPath基本语法
- Sigmoid函数求导
- 阿里巴巴是怎么处理大数据的?重磅揭秘!
- Java虚拟机之堆空间
- Spring中的接口驱动控制器
- MUI-grid(栅格),超小屏xs和小屏幕sm
- untiy TextMeshPro(简称TMP)组件详细内容
- 学习opencv:PS滤镜—浮雕
热门文章
- 服务器如何做好数据备份
- Java--IO流详解
- linux配置指定ip访问指定端口号,操作系统linux和dos linux下通过iptables只允许指定ip地址访问指定端...
- Python 爬虫进阶必备 | 某音乐网站查询参数加密逻辑分析(分离式 webpack 的加密代码扣取详解)...
- 国际期货黄金手续费怎么算?
- 安装BENQSCANNER 5560驱动与测试扫描
- Linux 使用Benq 4300U扫描仪
- 移动设备视频制作(转)
- Android Java小知识点集锦
- 电脑定时关机怎么设置?win10怎么设置定时关机