我按msdn的提示想在OLE内嵌Excel的情况下打开已经存在的xls文件,老是出问题,我的代码如下,大家帮我看看好么
CDemoCntrItem* pItem = NULL;
TRY
{
//Get the document associated with this view, and be sure it's
//valid.
CDemoDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc); //Create a new item associated with this document, and be sure
//it's valid.
pItem = new CDemoCntrItem(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(); COleVariant
covTrue((short)TRUE),
covFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); _Worksheet ws;
_Application app;
Workbooks books; ws.AttachDispatch(lpDisp);
app = ws.GetApplication();
books = app.GetWorkbooks(); books.Open("D:\\traffic.xls",
covOptional, covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional);
}到这里老是出Failed to create object. Make sure the object is entered in the system registry的错误,我用的是excel2000的库,刚接触ole,大家帮我看看好么。即使解决不了,告诉我怎么在多文档、使用OLE内嵌Excel的情况下打开已经存在的xls文件的其他方法也可以阿,谢谢了
CDemoCntrItem* pItem = NULL;
TRY
{
//Get the document associated with this view, and be sure it's
//valid.
CDemoDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc); //Create a new item associated with this document, and be sure
//it's valid.
pItem = new CDemoCntrItem(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(); COleVariant
covTrue((short)TRUE),
covFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); _Worksheet ws;
_Application app;
Workbooks books; ws.AttachDispatch(lpDisp);
app = ws.GetApplication();
books = app.GetWorkbooks(); books.Open("D:\\traffic.xls",
covOptional, covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional);
}到这里老是出Failed to create object. Make sure the object is entered in the system registry的错误,我用的是excel2000的库,刚接触ole,大家帮我看看好么。即使解决不了,告诉我怎么在多文档、使用OLE内嵌Excel的情况下打开已经存在的xls文件的其他方法也可以阿,谢谢了
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货