C#嵌入Excel文档,按照微软的做法,采用axWebBrowser,嵌入后可以取到Document(Excel.Application)
并且可以使用代码操作Excel文档,甚至可以使用如下这一句代码:
workBook.Application.CommandBars["Cell"]; 其中的属性控制右键菜单的显示和隐藏但是,当workBook.Application.CommandBars["Cell"].Controls.Add(..
这句就出错!
这种情况在弹出Excel执行时成功添加右键菜单。
是不是Web控件禁止变更Office菜单?有什么解决办法?请参见:
http://support.microsoft.com/kb/304662/
谢谢!

解决方案 »

  1.   

    /*我使用的是axWebBrowser1 控件作为容器实现嵌入效果的 //内嵌打开Excel
            private void OpenExcelInForm(string strFileName)
            {
                eApp = new Excel.Application();
                pnCellRFrmLock.Visible = false;
                //eApp = new Excel.Application();
                //eApp_protect = new Excel.Application();
                object refmissing = System.Reflection.Missing.Value;
                this.axWebBrowser1.Navigate(strFileName, ref refmissing, ref refmissing, ref refmissing, ref refmissing);
            }
            /// <summary>
            ///  首先需要明白,用WebBrowser“装载”Excel"表,实际上仍然是在新的进程空间中运行Excel.exe。可以用任务管理器观察。因此,只要我们能够获取Excel.Application对象,就能像上文一中所说的那样操作Excel数据。
            ///幸好可以通过WebBrowser的方法NavigateComplete提供的事件参数e来访问Excel.Application。
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void axWebBrowser1_NavigateComplete2(object sender, AxSHDocVw.DWebBrowserEvents2_NavigateComplete2Event e)
            {
                try
                {//.OLECMDID_HIDETOOLBARS
                    object refmissing = System.Reflection.Missing.Value;
                    axWebBrowser1.ExecWB(SHDocVw.OLECMDID.OLECMDID_HIDETOOLBARS, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, ref refmissing, ref refmissing);
                }
                catch { }
                Object o = e.pDisp;
                Object oDocument = o.GetType().InvokeMember("Document", BindingFlags.GetProperty, null, o, null);
                Object oApplication = o.GetType().InvokeMember("Application", BindingFlags.GetProperty, null, oDocument, null);
                Object oName = o.GetType().InvokeMember("Name",BindingFlags.GetProperty ,null,oApplication,null);
                string aaa = oName.ToString();
                Excel.Workbook wbb = (Excel.Workbook)oDocument;
                eApp = wbb.Application as Excel.ApplicationClass;//获取到eApp,可以像外部打开一样操作Excel了,支持VBA函数            workBook = eApp.Workbooks[1];
                workSheet = workBook.Worksheets[1] as Excel.Worksheet;  
                //但是问题出在下面!!!!
                 Office.CommandBar oCellRCommandBar;           
                oCellRCommandBar = workBook.Application.CommandBars["cell"];            
                oCellRButton = (Office.CommandBarButton)oCellRCommandBar.Controls.Add(Office.MsoControlType.msoControlButton, oMissing, oMissing, oMissing, true);//就这句!调试就跳出,也不出错!
                  //但是这句在弹出操作Excel时正常,而且可以成功创建一个Excel右键菜单项!
                // Set the caption and face ID.
                oCellRButton.Caption = "New game1";
                oCellRButton.FaceId = 1845;
            }
    希望高手指点!!(官方论坛有人说浏览器和Dsoframer.ocx内嵌方案属于Web,所以一些VBA方法不可用
      

  2.   

    相关的帖子,跟我一样的问题:http://topic.csdn.net/t/20050824/12/4228305.html