C# vsto com 加载项跨工作簿显示
- public excel.Application excelapp;
- private void toggleButton3_Click(object sender, RibbonControlEventArgs e)
- {
- try
- {
- int hwnd = Globals.ThisAddIn.Application.ActiveWindow.Hwnd;
- excelapp = (excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("excel.Application");
- FchartSet chartForm = new FchartSet();
- if (toggleButton3.Checked == true)
- {
- MessageBox.Show("开启导航");
- if (TaskPanels.TryGetValue(hwnd, out cpt1) == true)
- {
- //MessageBox.Show("已存在");
- cpt1.Visible = true;
- toggleButton3.Label = "关闭导航";
- return;
- }
- else
- {
- //MessageBox.Show("新建");
- excelapp.WorkbookActivate += new excel.AppEvents_WorkbookActivateEventHandler(Wb激活);//Wb激活
- cpt1 = Globals.ThisAddIn.CustomTaskPanes.Add(chartForm, "工作簿导航");
- cpt1.Visible = true;
- cpt1.Width = 220;
- cpt1.DockPosition = MsoCTPDockPosition.msoCTPDockPositionLeft;
- TaskPanels.Add(hwnd, cpt1);
- cpt1.VisibleChanged += new EventHandler(cpt1_VisibleChanged);
- }
- toggleButton3.Label = "关闭导航";
- }
- else
- {
- //app.WorkbookActivate -= new excel.AppEvents_WorkbookActivateEventHandler(Wb激活);
- cpt1.Visible = false;
- MessageBox.Show("关闭导航");
- toggleButton3.Label = "开启导航";
- }
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.ToString());
- }
- excelapp.ScreenUpdating = true;
- }
- public Dictionary<int, Microsoft.Office.Tools.CustomTaskPane> TaskPanels = new Dictionary<int, Microsoft.Office.Tools.CustomTaskPane>();
- public Microsoft.Office.Tools.CustomTaskPane cpt1;
- private void Wb激活(excel.Workbook Wb)//工作簿激活事件
- {
- cpt1.VisibleChanged += new EventHandler(cpt1_VisibleChanged);
- FchartSet chartForm = new FchartSet();
- int hwnd = Globals.ThisAddIn.Application.ActiveWindow.Hwnd;
- if (toggleButton3.Checked == true)
- {
- if (TaskPanels.TryGetValue(hwnd, out cpt1) == true)
- {
- cpt1.Visible = true;
- return;
- }
- else
- {
- cpt1 = Globals.ThisAddIn.CustomTaskPanes.Add(chartForm, "工作簿导航");
- cpt1.Visible = true;
- cpt1.Width = 220;
- cpt1.DockPosition = MsoCTPDockPosition.msoCTPDockPositionLeft;
- TaskPanels.Add(hwnd, cpt1);
- }
- }
- else
- {
- if (toggleButton3.Checked == false)
- {
- if (TaskPanels.TryGetValue(hwnd, out cpt1))
- {
- cpt1.Visible = false;
- return;
- }
- excelapp.ScreenUpdating = true;
- }
- }
- }
- private void cpt1_VisibleChanged(object sender, EventArgs e)//窗体显示或者隐藏同步ribbon按钮状态
- {
- // 获得Help Ribbon 对象
- Ribbon1 Ribbon = Globals.Ribbons.GetRibbon<Ribbon1>();
- // 同步Help Ribbon下的"帮助"按钮的状态
- Ribbon.toggleButton3.Checked = cpt1.Visible;
- if (cpt1.Visible == true)
- {
- Ribbon.toggleButton3
- .Label = "关闭导航";
- }
- else
- if (cpt1.Visible == false)
- {
- Ribbon.toggleButton3.Label = "开启导航";
- }
- }