网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
用MFC插入Excel工作表实现自动化
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式
*****/

void CEmbed_ExcelView::EmbedAutomateExcel()

{

//Change the cursor so the user knows something exciting is going

//on.

BeginWaitCursor();


CEmbed_ExcelCntrItem* pItem = NULL;

TRY

{

//Get the document associated with this view, and be sure it’s

//valid.

CEmbed_ExcelDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);


//Create a new item associated with this document, and be sure

//it’s valid.

pItem = new CEmbed_ExcelCntrItem(pDoc);

ASSERT_VALID(pItem);


// Get Class ID for Excel sheet.

// This is used in creation.

CLSID clsid;

if(FAILED(::CLSIDFromProgID(L"Excel.sheet",&clsid)))

//Any exception will do. We just need to break out of the

//TRY statement.

AfxThrowMemoryException();


// Create the Excel embedded item.

if(!pItem->CreateNewItem(clsid))

//Any exception will do. We just need to break out of the

//TRY statement.

AfxThrowMemoryException();


//Make sure the new CContainerItem is valid.

ASSERT_VALID(pItem);


// Launch the server to edit the item.

pItem->DoVerb(OLEIVERB_SHOW, this);


// As an arbitrary user interface design, this sets the

// selection to the last item inserted.

m_pSelection = pItem; // set selection to last inserted item

pDoc->UpdateAllViews(NULL);


//Query for the dispatch pointer for the embedded object. In

//this case, this is the Excel worksheet.

LPDISPATCH lpDisp;

lpDisp = pItem->GetIDispatch();


//Add text in cell A1 of the embedded Excel sheet

_Workbook wb;

Worksheets wsSet;

_Worksheet ws;

Range range;

_Application app;


//set _Workbook wb to use lpDisp, the IDispatch* of the

//actual workbook.

wb.AttachDispatch(lpDisp);


//Then get the worksheet’s application.

app = wb.GetApplication();


//Then get the first worksheet in the workbook

wsSet = wb.GetWorksheets();

ws = wsSet.GetItem(COleVariant((short)1));


//From there, get a Range object corresponding to cell A1.

range = ws.GetRange(COleVariant("A1"), COleVariant("A1"));


//Fill A1 with the string "Hello, World!"

range.SetValue(COleVariant("Hello, World!"));

}


//Here, we need to do clean up if something went wrong.

CATCH(CException, e)

{

if (pItem != NULL)

{

ASSERT_VALID(pItem);

pItem->Delete();

}

AfxMessageBox(IDP_FAILED_TO_CREATE);

}

END_CATCH


//Set the cursor back to normal so the user knows exciting stuff

//is no longer happening.

EndWaitCursor();

}

将下面一行添加到 Embed_ExcelView.h:

#include "excel8.h"

注意:如果使用Excel 2000, 头文件是 "excel9.h."


看一下View类中的 OnInsertObject() 方法,对其中的注释引起了我们的兴趣,因为它和我们刚写的方法有惊人的相似。事实上,我们刚才写的是OnInsertObject()的一个特例:允许用户从可用的OLE对象列表中选择其一插入到应用程序中。因为我们只想对Excel工作表进行自动化,所以派生这一行为。在我们的程序中,我们移去了InsertObject()内部的所有代码,用如上EmbedAutomateExcel()中的代码代替,或者你可以在InsertObject()函数中直接调用EmbedAutomateExcel()。


编译并运行我们的程序

在编辑菜单中选择 插入新对象.


运行结果:一张Microsoft Excel 工作表插入到视图中;并且通过自动化,A1单元格
  • 下一篇资讯: 和GUI有关的各种对象
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号