在MFC下实现Excel的部分操作

//建立
void CExcel1Dlg::OnOK() 
{
	// TODO: Add extra validation here
    COleVariant
		covTrue((short)TRUE),
		covFalse((short)FALSE),
		covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
	
    _Application ExcelApp;//excel对象
    Workbooks wbsMyBooks;//工作簿集
    _Workbook wbMyBook;//工作簿
    Worksheets wssMysheets;//表单集
    _Worksheet wsMysheet;//表单
    Range rgMyRge;//
    Range rgMyRgeFormat;//
    LPDISPATCH lpDisp;//
	
    //创建Excel 2000服务器(启动Excel)
    if (!ExcelApp.CreateDispatch("Excel.Application",NULL))
    {
        AfxMessageBox("创建Excel服务失败!");
        exit(1);
    }
    ExcelApp.SetVisible(false);//是否打开
	
    wbsMyBooks.AttachDispatch(ExcelApp.GetWorkbooks(),true);//
	
    wbMyBook.AttachDispatch(wbsMyBooks.Add(covOptional));
    //得到Worksheets
    wssMysheets.AttachDispatch(wbMyBook.GetWorksheets(),true);
    //得到sheet1
    wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("sheet1")),true);
    //得到全部Cells,此时,rgMyRge是cells的集合
    rgMyRge.AttachDispatch(wsMysheet.GetCells(),true);
    //设置所有单元格为空
    rgMyRge.SetValue(_variant_t(""));
    CString str,str2;
    str = "****";
    rgMyRge.SetItem(_variant_t((long)1),_variant_t((long)2),_variant_t(str));
    str = "****";
    rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)1),_variant_t(str));
    str = "****";
    rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)2),_variant_t(str));
    str = "****";
    rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)3),_variant_t(str));
    str = "****";
    rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)4),_variant_t(str));
    str = "****";
    rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)5),_variant_t(str));
    str = "****";
    rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)6),_variant_t(str));
    str = "****";
    rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)7),_variant_t(str));
    str = "****";
    rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)8),_variant_t(str));
	
	//    rgMyRge.SetItem(_variant_t((long)3),_variant_t((long)8),_variant_t("12345678901234567890"));
	
	//    rgMyRge.SetNumberFormat(_variant_t("0.0"));
	
	
	//设置格式
    lpDisp = wsMysheet.GetRange(_variant_t("B3"),_variant_t("B105"));
    ASSERT(lpDisp);
    rgMyRgeFormat.AttachDispatch(lpDisp);
    rgMyRgeFormat.SetNumberFormat(_variant_t("0"));
	
	//设置字体
    Font ft;
    Interior it; //定义背景色变量
    //表头
    lpDisp = wsMysheet.GetRange(_variant_t("A1"),_variant_t("H1"));
    rgMyRgeFormat.AttachDispatch(lpDisp);
    ft.AttachDispatch(rgMyRgeFormat.GetFont());
    ft.SetSize(_variant_t((long)20));   //字大小
	
    lpDisp = wsMysheet.GetRange(_variant_t("A2"),_variant_t("H2"));
    rgMyRgeFormat.AttachDispatch(lpDisp);
    ft.AttachDispatch(rgMyRgeFormat.GetFont());
    ft.SetColorIndex(_variant_t((long)3));   //字颜色
    it.AttachDispatch(rgMyRgeFormat.GetInterior());
    it.SetColorIndex(_variant_t((long)19));     //背景色
	
	
    for(i=startrow; i<startrow+NumberofStudent; i++)
    {
        str.Format(_T("A%d"),i);
        str2.Format(_T("H%d"),i);
        if(i%2==0)
        {
            lpDisp = wsMysheet.GetRange(_variant_t(str),_variant_t(str2));
            rgMyRgeFormat.AttachDispatch(lpDisp);
            it.AttachDispatch(rgMyRgeFormat.GetInterior());
            it.SetColorIndex(_variant_t((long)34));     //背景色
        }
    }
	
    // 3:居中  2:左对齐  1:右对齐
    lpDisp = wsMysheet.GetRange(_variant_t("A1"),_variant_t("H2"));
    rgMyRge.AttachDispatch(lpDisp);
    rgMyRge.SetHorizontalAlignment(_variant_t((long)3));
	
	//合并单元格
    lpDisp = wsMysheet.GetRange(_variant_t("A1"),_variant_t("H1"));
    //ASSERT(lpDisp);
    rgMyRge.AttachDispatch(lpDisp);
    rgMyRge.Merge(_variant_t("0"));
	
    //设置宽度为自动适应
    //lpDisp = rgMyRge.GetEntireColumn();
    //rgMyRge.AttachDispatch(lpDisp);
    //rgMyRge.AutoFit();
	
    lpDisp = wsMysheet.GetRange(_variant_t("A1"),_variant_t("A1"));
    ASSERT(lpDisp);
    rgMyRge.AttachDispatch(lpDisp);
    lpDisp = rgMyRge.GetEntireRow();
    rgMyRge.AttachDispatch(lpDisp);
    //插入一行
	//rgMyRge.Insert(_variant_t((long)1));
	
    //打印预览
    //wbMyBook.PrintPreview(_variant_t(false));
    //释放对象
    ExcelApp.SetVisible(true);//打开表格
	
    rgMyRge.ReleaseDispatch();
    wsMysheet.ReleaseDispatch();
    wssMysheets.ReleaseDispatch();
    wbMyBook.ReleaseDispatch();
    wbsMyBooks.ReleaseDispatch();
    ExcelApp.ReleaseDispatch();
	CDialog::OnOK();
}
//通过窗口打开已有的表格
void CExcel1Dlg::OnOpen1() 
{
	_Application app;
    Workbooks books;
    _Workbook book;
	Worksheets sheets;
    _Worksheet sheet; 
	Range range;
    VARIANT ret; 
	COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
	CFileFind filefind;
	// TODO: Add your control notification handler code here
	CString FilePathName;
	CFileDialog dlg(TRUE, //TRUE为OPEN对话框,FALSE为SAVE AS对话框
        NULL,
        NULL,
        OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
        (LPCTSTR)_TEXT("Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||"),
        NULL);
    if(dlg.DoModal()==IDOK)
	{
            FilePathName=dlg.GetPathName(); //文件相对路径保存在了FilePathName里
		app.CreateDispatch("Excel.Application");//开启Excel服务
		if(!filefind.FindFile(FilePathName))
		{   
			AfxMessageBox( "没有找到模版文档,请其查找" );   
			return;
		}
		LPDISPATCH lpDisp;
		books=app.GetWorkbooks();
		lpDisp = books.Open(FilePathName,
			covOptional, covOptional, covOptional, covOptional,
			covOptional, covOptional, covOptional, covOptional,
			covOptional, covOptional, covOptional, covOptional
			);//打开表格
		//ExcelApp.SetVisible(false);//
		book.AttachDispatch(lpDisp);//
		sheets = book.GetWorksheets();
        sheet = sheets.GetItem(COleVariant((short)1)); 
		range = sheet.GetRange(COleVariant("A1"), COleVariant("C8"));
        ret = range.GetValue(); 
		COleSafeArray sa(ret);
		app.SetVisible(true);
		//app.Quit();  
		//m_ExlApp一定要释放,否则程序结束后还会有一个Excel进程驻留在内存中,而且程序重复运行的时候会出错   
        //app.ReleaseDispatch(); 
	}
}
如果有不对的地方欢迎大家指正,有的函数我也没有看懂。。。。。。。懂得请解释一下。。。。。。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值