vs2010 MFC开发 导出Excel 方法及步骤
最近工作需要将listctrl中的数据导出到Excel中。网上找了很多,但多数是VC6.0的。结合VC6.0导出的方法,自己琢磨了不少时间,终于将问题解决了。轻松之余,将过程分享出来,希望对需要的人有所帮助。
VC6.0的请看这里:http://topic.csdn.net/t/20050718/15/4151984.html
环境:
Windows7
Microsoft Visual Studio 2010
Microsoft Office Excel 2003
说明:用的公司的电脑,操作系统和软件都是正版的。
1、新建C++工程
新建自己的C++工程。
2、添加Excel类库
在工程名上右键,选择Add---Class,选择MFC Class From TypeLib,如图:
![](http://img1.ph.126.net/qvgYHg2AAhMT57PYYlwhbw==/3192770660831360126.png)
然后添加如图的几个类。
![](http://img846.ph.126.net/qIOr-cgMNgwQyeD5VSaAYw==/747597538145427867.png)
3、修改头文件
进入刚添加进来的几个类头文件中将#import开头的这句注掉
![](http://img838.ph.126.net/USTqJWVQ5wPt0TnNw15G-A==/817684807346348687.png)
4、修改提示的错误
将修改过的工程编译一下,出现如下错误:
![](http://img153.ph.126.net/T3zum7Msr8V9IP04kg3B7Q==/1647473038689339653.png)
双击提示,在DialogBox()前加下划线,如图:
![](http://img776.ph.126.net/Ov3pp6lKMJjgJONBIcl3Kg==/1265792970269013645.png)
![](http://img838.ph.126.net/tqtG7LKwLpm4nybJSo10Eg==/812618257765616997.png)
5、添加头文件
在使用导出功能的文件中添加头文件:
![](http://img396.ph.126.net/kJcoreULaTTtuGm2T9R-yA==/1089308159871533372.jpg)
6、使用Excel类库提供的函数将需要导出的数据导出为.xls文件
经过以上几步,现在可以使用Excel类库提供的函数导出数据了。
与网上许多文章相对比一下,导出流程一样。只不过类库函数有所改变。函数名由Get改为get_,Set改为put_。
附录一: 导出Excel格式的简单流程
CString strFile = _T("E:\\hanhan.xls");
COleVariant
covTrue((short)TRUE),
covFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
CApplication0 app;
CWorkbook0 book;
CWorkbooks0 books;
CWorksheet0 sheet;
CWorksheets0 sheets;
CRange0 range;
CFont1 font;
if (!app.CreateDispatch(_T("Excel.Application")))
{
MessageBox(_T("Error!"));
}
books = app.get_Workbooks();
book = books.Add(covOptional);
sheets = book.get_Worksheets();
sheet = sheets.get_Item(COleVariant((short)1));
range = sheet.get_Range(COleVariant(_T("A1")),COleVariant(_T("A1")));
range.put_Value2(COleVariant(_T("hanhan")));
book.SaveCopyAs(COleVariant(strFile));
book.put_Saved(true);
book.ReleaseDispatch();
books.ReleaseDispatch();
app.Quit();
app.ReleaseDispatch();
附录二:将ListCtrl中的数据导出为Excel格式
CString strFile = _T("E:\\Test.xls");
COleVariant
covTrue((short)TRUE),
covFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
CApplication app;
CWorkbooks books;
CWorkbook book;
CWorksheets sheets;
CWorksheet sheet;
CRange range;
CFont0 font;
if (!app.CreateDispatch(_T("Excel.Application")))
{
MessageBox(_T("创建失败!"));
return;
}
//Get a new workbook.
books = app.get_Workbooks();
book = books.Add(covOptional);
sheets = book.get_Worksheets();
sheet = sheets.get_Item(COleVariant((short)1));
CListCtrl控件report风格//
CHeaderCtrl *pmyHeaderCtrl;
pmyHeaderCtrl = m_clcData.GetHeaderCtrl();//此句取得CListCtrl控件的列表頭
int iRow,iCol;
int m_cols = pmyHeaderCtrl-> GetItemCount();
int m_rows = m_clcData.GetItemCount();
HDITEM hdi;
TCHAR lpBuffer[256];
bool fFound = false;
hdi.mask = HDI_TEXT;
hdi.pszText = lpBuffer;
hdi.cchTextMax = 256;
CString colname;
CString strTemp;
for(iCol=0; iCol <m_cols; iCol++)//将列表的标题头写入EXCEL
{
GetCellName(1 ,iCol + 1, colname);
range = sheet.get_Range(COleVariant(colname),COleVariant(colname));
pmyHeaderCtrl-> GetItem(iCol, &hdi);
range.put_Value2(COleVariant(hdi.pszText));
int nWidth = m_clcData.GetColumnWidth(iCol)/6;
//得到第iCol+1列
range.AttachDispatch(range.get_Item(_variant_t((long)(iCol+1)),vtMissing).pdispVal,true);
//设置列宽
range.put_ColumnWidth(_variant_t((long)nWidth));
}
range = sheet.get_Range(COleVariant( _T("A1 ")), COleVariant(colname));
range.put_RowHeight(_variant_t((long)50));//设置行的高度
font = range.get_Font();
font.put_Bold(covTrue);
range.put_VerticalAlignment(COleVariant((short)-4108));//xlVAlignCenter = -4108
COleSafeArray saRet;
DWORD numElements[]={m_rows,m_cols}; //5x2 element array
saRet.Create(VT_BSTR, 2, numElements);
range = sheet.get_Range(COleVariant( _T("A2 ")),covOptional);
range = range.get_Resize(COleVariant((short)m_rows),COleVariant((short)m_cols));
long index[2];
range = sheet.get_Range(COleVariant( _T("A2 ")),covOptional);
range = range.get_Resize(COleVariant((short)m_rows),COleVariant((short)m_cols));
for ( iRow = 1; iRow <= m_rows; iRow++)//将列表内容写入EXCEL
{
for ( iCol = 1; iCol <= m_cols; iCol++)
{
index[0]=iRow-1;
index[1]=iCol-1;
CString szTemp;
szTemp=m_clcData.GetItemText(iRow-1,iCol-1);
BSTR bstr = szTemp.AllocSysString();
saRet.PutElement(index,bstr);
SysFreeString(bstr);
}
}
range.put_Value2(COleVariant(saRet));
// Cnterior cellinterior;
// range = sheet.get_Range(COleVariant( _T("A1 ")),covOptional);
// range = range.get_Resize(COleVariant((short)1),COleVariant((short)m_cols));
// books = range.get_Interior();
// cellinterior.AttachDispatch(books);
// cellinterior.put_ColorIndex(COleVariant((short)37));//设置EXCEL头一行的背景颜色
// for( iRow=1; iRow <= m_rows; iRow++)//设置EXCEL其余的背景颜色(颜色交替变换)
// {
// int state=iRow%2;
// CString index;
// index.Format( _T("A%d "),iRow+1);
// range = sheet.get_Range(COleVariant(index),covOptional);
// range = range.get_Resize(COleVariant((short)1),COleVariant((short)m_cols));
// books=range.get_Interior();
// cellinterior.AttachDispatch(books);
// if(!state)
// cellinterior.put_ColorIndex(COleVariant((short)36));
// else
// cellinterior.put_ColorIndex(COleVariant((short)24));
// }
saRet.Detach();
//
book.SaveCopyAs(COleVariant(strFile));
// cellinterior.ReleaseDispatch();
book.put_Saved(true);
book.ReleaseDispatch();
books.ReleaseDispatch();
app.Quit();
app.ReleaseDispatch();
由于不需要,Excel单元格样式及颜色等属性设置没有做,有兴趣的可以自己去试试。代码中设置的有错。
自己写的一个获取单元头的函数:
void GetCellName(int nRow, int nCol, CString &strName)
{
int nSeed = nCol;
CString strRow;
char cCell = 'A' + nCol - 1;
strName.Format(_T("%c"), cCell);
strRow.Format(_T( "%d "), nRow);
strName += strRow;
}
vs2010 MFC开发 导出Excel 方法及步骤相关推荐
- PHP导出Excel方法大全
导出EXCEL方法一 #xmlns即是xml的命名空间$str = "<html xmlns:o=\"urn:schemas-microsoft-com:office:off ...
- 编程示例:表格程序开发的EXCEL方法,以二维码的数据容量计算为例
编程示例:表格程序开发的EXCEL方法,以二维码的数据容量计算为例 在二维码的计算中,它的第一个表格是以版本号为参数,计算该版本下的数据容量. 表1如下: 在EXCEL中以公式的形式生成与上图一致的表 ...
- java生成excel文件步骤_java导出Excel文件的步骤全纪录
一.背景 当前b/s模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用excel打开(电信系统.银行系统).或者是:我们已经习惯用excel打印.这样在我们实际 ...
- c#后台如何导出excel到本地_C#导出EXCEL方法总结
下面介绍下我根据网上学习C#中导出EXCEL的几种方法: 一.asp.net导出Excel 1.将整个html全部输出到Excel 此方法会将html中所有的内容,如按钮.表格.图片等全部输出 Vie ...
- DevExpress Winform 所有可打印控件(gridcontrol等)通用导出excel方法
涛神联合Dxper.Net开发者论坛管理在腾讯课堂开启DevExpress培训课程 详情可以加群QQ群:294560883 关于DevExpress Winform 的所有可打印控件的导出excel ...
- exp导出excel oracle_oracle导出excel 方法总结
一.oracle导出excel 方法一:最简单的方法---用工具plsql dev 执行File =>newReport Window .在sql标签中写入需要的sql,点击执行或按快捷键F8, ...
- java开发导出Excel和Word文档
前言:刚满18的小编在电脑网页上看到好看但19禁的电影,然后想下载到手机上看,你会怎么做? 1.这是一个后台,里面已经增加了几部电影... 2.这是导出Excel,这是方便以后查询用的,生成Excel ...
- ASP.NET导入导出Excel方法大全
本文介绍下,C#实现的可以导出与导入excel的代码一例,有需要的朋友,参考下吧. C#实现导出与导入excel. 代码1: 复制代码 代码示例: #region 导出Excel /// & ...
- MFC 导出 Excel 方法
运行效果 代码 void CMFCApplication14Dlg::OnBnClickedButton1() {CString FileName = L"first.xls";C ...
最新文章
- oracle更新统计信息执行计划,为准确生成执行计划更新统计信息-analyze与dbms_stats...
- 关系型数据库(RDBMS)实质
- .NET Core实战项目之CMS 第十七章 CMS网站系统的部署
- Java EE 企业网站_基于jsp的企业网站系统-JavaEE实现企业网站系统 - java项目源码...
- Spring Boot学习总结(3)——SpringBoot魅力所在
- webpy使用笔记(一)
- The best GraphQL Loader for Webpack
- C#枚举器:foreach语句、IEnumerable、IEnumerator以及yield return (一)
- curl的安装与配置
- 风尚云网学习-Linux/宝塔面板部署禅道开源系统
- 乐高wedo搭建图纸_乐高wedo2.0图纸 无齿翼龙
- 计算机操作日志文件,教你完全读懂Windows日志文件
- Android设置全屏代码
- 两部手机怎样才能把数据都传过来_新旧手机怎样互传数据?
- cv2.VideoWriter()
- python 编程基础案例
- html元素相对定位和绝对定位
- 基于高德POI搜索的地址类型判断
- pixy php,Pixy快速入门指南.pdf
- 快递分拣的计算机技术是那些,RFID物流分拣技术让每一件货物快速找到各自的“家”!...