找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2877|回复: 0
打印 上一主题 下一主题
收起左侧

MFC 操作EXCEL VS2008

[复制链接]
跳转到指定楼层
楼主
ID:60266 发表于 2014-8-18 02:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
MFC 基于对话框,对EXCEL操作;步骤如下:
1:新建MFC 对话框 工程
2:项目->添加类->TypeLib中的MFC类->选择“从"文件"来源添加类”,位置为excel的安装路径->设置好之后,就会出现很多的接口,选择其中常用的接口接口满足要求,具体的有5类常用接口:_Application、_Workbook、_Worksheet、Workbooks、Worksheets、Range,这6类会对应生成6个.h文件添加到工程中,以后在工程中直接调用这些类的函数即可完成对excel的各种操作。



3:初始化工作,非常重要,在  BOOL CxxxApp::InitInstance()函数中进行初始化;
   A:,该函数是主对话框的初始化函数,在INT_PTR nResponse = dlg.DoModal()之前添加下面代码
        if (CoInitializeEx(NULL,COINIT_MULTITHREADED)!=0)
{
AfxMessageBox("初始化COM支持库失败!");
exit(1);
}
INT_PTR nResponse = dlg.DoModal();
   B:在return FALSE;前可加入关闭excel进程以及释放对象的语句,
if (ExcelSave  == 0) {
    book.put_Saved(true);
}
books.Close();   
        app.Quit();// 退出  
        //释放对象   
    range.ReleaseDispatch();  
    sheet.ReleaseDispatch();  
     sheets.ReleaseDispatch();  
    book.ReleaseDispatch();  
    books.ReleaseDispatch();  
    app.ReleaseDispatch();
CoUninitialize();
return FALSE;


4:利用模板建立新的文档
if(!app.CreateDispatch("Excel.Application"))  
{  
AfxMessageBox("无法启动Excel服务器!");  
return false;  
}  
books.AttachDispatch(app.get_Workbooks(),true);
book = books.Add(covOptional);
//得到Worksheets
sheets.AttachDispatch(book.get_Worksheets(),true);
//得到sheet1
sheet.AttachDispatch(sheets.get_Item(_variant_t("sheet1")),true);
//得到全部Cells,此时,rgMyRge是cells的集合
range.AttachDispatch(sheet.get_Cells(),true);


5:excel保存

//选择目录按钮
    char szPath[MAX_PATH];     //存放选择的目录路径
    CString str;
    CString str1;
int temp = 0;
    ZeroMemory(szPath, sizeof(szPath));   
    BROWSEINFO bi;   
    bi.hwndOwner = m_hWnd;   
    bi.pidlRoot = NULL;   
    bi.pszDisplayName = szPath;   
    bi.lpszTitle = "请选择文件保存的路径:";   
    bi.ulFlags = 0;   
    bi.lpfn = NULL;   
    bi.lParam = 0;   
    bi.iImage = 0;   
    //弹出选择目录对话框
    LPITEMIDLIST lp = SHBrowseForFolder(&bi);   

    if(lp && SHGetPathFromIDList(lp, szPath))   
    {
        //str.Format("数据文件data.xls保存在 %s",  szPath);
       // AfxMessageBox(str);
temp = 1;
    }
    else   
        AfxMessageBox("无效的目录,请重新选择");   

///////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
if (temp == 0) {
return;
}
//居中
CString   strlt,strrd;
strlt= "A1 ";
strrd= "E4 ";
//range.AttachDispatch(sheet.get_Range(_variant_t(strlt),_variant_t(strrd)),true);
range.AttachDispatch(sheet.get_UsedRange());
range.put_HorizontalAlignment(_variant_t((long)3));
//book.SaveCopyAs(_variant_t());
//book.SaveCopyAs(_variant_t("C:\\Users\\Administrator\\Desktop\\laaaq.xls"));
str = szPath;
if (str.GetLength() > 3) {
str += "\\data.xls";
} else {
str += "data.xls";
}
book.SaveAs(COleVariant(str),covOptional,covOptional,covOptional,covOptional,covOptional,0,covOptional,covOptional,covOptional,covOptional,covOptional);

6:excel操作举例
//合并单元格
CString str;
str="节点A";
range=sheet.get_Range(COleVariant("A1"),COleVariant("A1"));
range.put_Value2(COleVariant(str));
range=sheet.get_Range(COleVariant("A1"),COleVariant("C1"));
range.Select();
range.Merge(COleVariant((long)0));
str="节点B";
range=sheet.get_Range(COleVariant("D1"),COleVariant("D1"));
range.put_Value2(COleVariant(str));
range=sheet.get_Range(COleVariant("D1"),COleVariant("F1"));
range.Select();
range.Merge(COleVariant((long)0));
str="节点C";
range=sheet.get_Range(COleVariant("G1"),COleVariant("G1"));
range.put_Value2(COleVariant(str));
range=sheet.get_Range(COleVariant("G1"),COleVariant("I1"));
range.Select();
range.Merge(COleVariant((long)0));
range.AttachDispatch(sheet.get_Cells(),true);
range.put_Item(_variant_t((long)2),_variant_t((long)1),_variant_t("XA"));
range.put_Item(_variant_t((long)2),_variant_t((long)2),_variant_t("YA"));
range.put_Item(_variant_t((long)2),_variant_t((long)3),_variant_t("ZA"));
range.put_Item(_variant_t((long)2),_variant_t((long)4),_variant_t("XB"));
range.put_Item(_variant_t((long)2),_variant_t((long)5),_variant_t("YB"));
range.put_Item(_variant_t((long)2),_variant_t((long)6),_variant_t("ZB"));
range.put_Item(_variant_t((long)2),_variant_t((long)7),_variant_t("XC"));
range.put_Item(_variant_t((long)2),_variant_t((long)8),_variant_t("YC"));
range.put_Item(_variant_t((long)2),_variant_t((long)9),_variant_t("ZC"));



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表