LinkBack Thread Tools Search this Thread Display Modes
Prev Previous Post   Next Post Next
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 1
Default Embedded Excel Problem via c++

Hello Everyone:

I been having this weired embedded excel problem. I am trying to
create a commandbar control in embedded excel with some buttons in it.
It is able to create everything when I am creating an
Excel.Application. However, I am not able to create any commandbar or
button or anything when I am creating Excel.sheet / embedded excel. I
am using the following turorial:
http://support.microsoft.com/kb/q194906/ , which definetly works in
case of Excel.Application. But the code below doesn't work.


TRY
{
//Get the document associated with this view, and be sure that it is
//valid.
CSG3GDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

// Create a new item associated with this document, and be sure that
it is valid.
pItem = new CSG3GCntrItem(pDoc);
ASSERT_VALID(pItem);

// Get a Class ID for the Excel sheet. This is used in creation.

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

// Create the Excel embedded item.
if(!pItem-CreateNewItem(clsid))
AfxThrowMemoryException();

// Make sure the new CContainerItem is valid.
ASSERT_VALID(pItem);

// Start the server to edit the item.
pItem-DoVerb(OLEIVERB_SHOW, this);

/// save Control pointer
m_pSelection = pItem;

LPDISPATCH lpDisp = pItem-GetIDispatch();

_Application ap; ap.AttachDispatch(lpDisp);

ap = ap.GetApplication();

pExcelEvHandle = new CExcelEvHandle(this);
pExcelEvHandle-AddRef();
pExcelEvHandle-AttachToSource(ap.m_lpDispatch);
Col = r.GetColumn();
HRESULT hr;
VARIANT vResult;
char buf[1024]; // General purpose message buffer
// Convenient values declared as ColeVariants.
COleVariant covTrue((short)TRUE),
covFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
long lCount = 0;
CommandBarControls oNewControls;
_CommandBarButton oNewButton2, oButton, oNewButton1;
CommandBar oNewBar;


//build a new commandbar for excel and add the commandbar to xl
collection
hr = ap.m_lpDispatch-GetIDsOfNames(IID_NULL, &strCBs, 1,
LOCALE_SYSTEM_DEFAULT, &dispID);

if (FAILED(hr))
{
sprintf(buf,"Failed to GetIDsOfNames() ... Error = %08lx",
(long)hr);
AfxMessageBox(buf,MB_SETFOREGROUND);
}

//Get a dispatch pointer to commandbars. Use that of running
application's existing menu
//confuguration. "vresult" is a VARIANT. It is declared above.
ap.InvokeHelper(dispID, //commandbars in this case
DISPATCH_METHOD | DISPATCH_PROPERTYGET,
VT_VARIANT, //type of return value
(void*)&vResult, //address of var reciving IDispatch of CmdBrs
NULL); //Pointer to parameters string

_CommandBars cbs(vResult.pdispVal); //construct the commandBars object
and attach the IDispatch
//pointer to it


lCount = cbs.GetCount(); // Word has 92!!??
// MSOffice reconfigures for each
// user-application.
//CString tmp; tmp.Format("LCount=%d", lCount); AfxMessageBox(tmp);


vResult.pdispVal = cbs.GetActiveMenuBar(); //returns a LPDISPATCH
pointer of the commandbar object that
//represents the active menu bar in the container application; that is
MS office configuration

CommandBar oBar(vResult.pdispVal); // Construct a new
// CommandBar object
// & attach the LPDispatch
// of the active menu bar

VARIANT vName;
vName.vt = VT_BSTR;
vName.bstrVal = SysAllocString(L"Groups Command Bar"); //Variant for
the name of new bar
oNewControls = oBar.GetControls();


VARIANT vPosition;
vPosition.vt = VT_I2;
vPosition.iVal = 1; //4 = Floating; 0 = Left;
//Variant for position of new bar
oBar = (CommandBarPopup)cbs.Add(vName, vPosition, covFalse, covTrue);




//CommandBar oNewBar;

//AfxMessageBox("Now adding new bar to cbs collection");

try {
oNewBar = cbs.Add(vName, //const Variant Name = Groups Command Bar
vPosition, //const Variant Position = At top
covFalse, //const variant (replace) Menubar
covTrue); //const variant temporary

}
catch (COleException &e)
{
AfxMessageBox("error occured in add function");
}
oNewBar.SetVisible(TRUE);

oNewControls = oNewBar.GetControls();
//object reference to collection
AfxMessageBox("test");

VARIANT vType;
vType.vt = VT_I4;
vType.iVal = 1;
//Control type is button

oNewButton2 = oNewControls.Add(vType, covOptional, //Id
covOptional, //Parameter
covOptional, //Before
covTrue); //temporary
oNewButton2.SetStyle(3); //msoButtonIconAndCaption
oNewButton2.SetCaption("End Group");
oNewButton2.SetTooltipText("Delete Group");
oNewButton2.SetVisible(TRUE);
oNewButton2.SetState(0); //msoButtonUp
oNewButton2.SetFaceId((long) 2186);
oNewButton2.SetOnAction("CloseExcel");


oNewButton1 =
oNewControls.Add(vType, // Type = msoControlButton
covOptional, // Id
covOptional, // Parameter
COleVariant((long)1), // Before
covTrue // Temporary
);
oNewButton1.SetStyle(3); // msoButtonIconAndCaption
oNewButton1.SetCaption("Macro");
oNewButton1.SetTooltipText("Run Macro");
oNewButton1.SetVisible(TRUE);
oNewButton1.SetState(0); // msoButtonUp
oNewButton1.SetFaceId((long) 186); // commented for temporary test
oNewButton1.SetOnAction("TestMacro");
AfxMessageBox("Buttons in place. Click 'Macro' to start Excel");



oNewButton1.ReleaseDispatch();
oNewButton2.ReleaseDispatch();
oNewControls.ReleaseDispatch();
oNewBar.ReleaseDispatch();
oBar.ReleaseDispatch();
cbs.ReleaseDispatch();






}

// Clean up if something went wrong.

CATCH(CException, e)
{
if (pItem)
{
pItem-Delete();
delete pItem;
}
AfxMessageBox("Failed to load Excel Application");
result = false;
}
END_CATCH


You can create an embedded excel worksheet using the following
article: http://support.microsoft.com/kb/q184663/

Any help would be greatly appreciated.

Thanks,
Ashish Misra

 
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Problem in updating the Powerpoint Embedded Chart with Excel figur Vinod Charts and Charting in Excel 0 May 4th 07 02:19 PM
Problem with managing excel embedded with IFRAME news://news.microsoft.com Excel Programming 1 September 8th 06 08:17 AM
Problem opening Excel file 1 time with embedded Word objects [email protected] Excel Programming 0 August 3rd 05 08:47 PM
problem with embedded pdf file Gary Excel Discussion (Misc queries) 0 January 19th 05 01:57 PM
Excel VBA: Problem with copying an embedded chart from one worksheet to another Flystar[_13_] Excel Programming 2 May 21st 04 01:13 AM


All times are GMT +1. The time now is 11:48 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright ©2004-2025 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"