最近工作需要将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,如图:

然后添加如图的几个类。

3、修改头文件

进入刚添加进来的几个类头文件中将#import开头的这句注掉

4、修改提示的错误

将修改过的工程编译一下,出现如下错误:

双击提示,在DialogBox()前加下划线,如图:

5、添加头文件

在使用导出功能的文件中添加头文件:

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 方法及步骤相关推荐

  1. PHP导出Excel方法大全

    导出EXCEL方法一 #xmlns即是xml的命名空间$str = "<html xmlns:o=\"urn:schemas-microsoft-com:office:off ...

  2. 编程示例:表格程序开发的EXCEL方法,以二维码的数据容量计算为例

    编程示例:表格程序开发的EXCEL方法,以二维码的数据容量计算为例 在二维码的计算中,它的第一个表格是以版本号为参数,计算该版本下的数据容量. 表1如下: 在EXCEL中以公式的形式生成与上图一致的表 ...

  3. java生成excel文件步骤_java导出Excel文件的步骤全纪录

    一.背景 当前b/s模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用excel打开(电信系统.银行系统).或者是:我们已经习惯用excel打印.这样在我们实际 ...

  4. c#后台如何导出excel到本地_C#导出EXCEL方法总结

    下面介绍下我根据网上学习C#中导出EXCEL的几种方法: 一.asp.net导出Excel 1.将整个html全部输出到Excel 此方法会将html中所有的内容,如按钮.表格.图片等全部输出 Vie ...

  5. DevExpress Winform 所有可打印控件(gridcontrol等)通用导出excel方法

    涛神联合Dxper.Net开发者论坛管理在腾讯课堂开启DevExpress培训课程 详情可以加群QQ群:294560883 关于DevExpress Winform 的所有可打印控件的导出excel ...

  6. exp导出excel oracle_oracle导出excel 方法总结

    一.oracle导出excel 方法一:最简单的方法---用工具plsql dev 执行File =>newReport Window .在sql标签中写入需要的sql,点击执行或按快捷键F8, ...

  7. java开发导出Excel和Word文档

    前言:刚满18的小编在电脑网页上看到好看但19禁的电影,然后想下载到手机上看,你会怎么做? 1.这是一个后台,里面已经增加了几部电影... 2.这是导出Excel,这是方便以后查询用的,生成Excel ...

  8. ASP.NET导入导出Excel方法大全

    本文介绍下,C#实现的可以导出与导入excel的代码一例,有需要的朋友,参考下吧. C#实现导出与导入excel. 代码1:   复制代码 代码示例: #region  导出Excel   /// & ...

  9. MFC 导出 Excel 方法

    运行效果 代码 void CMFCApplication14Dlg::OnBnClickedButton1() {CString FileName = L"first.xls";C ...

最新文章

  1. oracle更新统计信息执行计划,为准确生成执行计划更新统计信息-analyze与dbms_stats...
  2. 关系型数据库(RDBMS)实质
  3. .NET Core实战项目之CMS 第十七章 CMS网站系统的部署
  4. Java EE 企业网站_基于jsp的企业网站系统-JavaEE实现企业网站系统 - java项目源码...
  5. Spring Boot学习总结(3)——SpringBoot魅力所在
  6. webpy使用笔记(一)
  7. The best GraphQL Loader for Webpack
  8. C#枚举器:foreach语句、IEnumerable、IEnumerator以及yield return (一)
  9. curl的安装与配置
  10. 风尚云网学习-Linux/宝塔面板部署禅道开源系统
  11. 乐高wedo搭建图纸_乐高wedo2.0图纸 无齿翼龙
  12. 计算机操作日志文件,教你完全读懂Windows日志文件
  13. Android设置全屏代码
  14. 两部手机怎样才能把数据都传过来_新旧手机怎样互传数据?
  15. cv2.VideoWriter()
  16. python 编程基础案例
  17. html元素相对定位和绝对定位
  18. 基于高德POI搜索的地址类型判断
  19. pixy php,Pixy快速入门指南.pdf
  20. 快递分拣的计算机技术是那些,RFID物流分拣技术让每一件货物快速找到各自的“家”!...

热门文章

  1. RNN架构解析——认识RNN模型
  2. Android Studio实现Activity之间传递参数
  3. idea主菜单不见了
  4. “女神节”礼物买啥好?推荐极米投影仪RS Pro 2
  5. java 生成趋势图_JFreeChart折线图的生成方法
  6. ftrack Review 双重校验
  7. 计算机英语教学设计反思,英语教学设计及反思【集锦】
  8. 诚心求问:做一个 Serverless SSR 需要几步?
  9. 【视觉定位UV】定位之后打印有偏移的解决办法
  10. NVIDIA vGPU