У меня есть приложение VSTO, которое имеет несколько групп и кнопок на ленте. Когда пользователь нажимает кнопку, в Excel загружается указанная форма c. Похоже, что когда форма открыта, пользователь не может открыть другой экземпляр Excel, если форма не закрыта в первом экземпляре. Есть ли способ отделить надстройку от разных экземпляров?
У меня есть разработанный код, который использует обратный вызов getVisbility, чтобы решить, показывать ли вкладку на ленте на основе указанной c рабочей книги. Однако это не позволяет пользователям использовать несколько экземпляров Excel, пока открыта форма windows. Как только я закрываю форму - открывается новый экземпляр Excel. Инструмент VSTO Excel был разработан на прикладном уровне.
MainRibbon. xml
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="Ribbon_Load">
<ribbon>
<tabs>
<tab idMso="TabAddIns" label="MDS" insertBeforeMso="TabHome" getVisible="setVisbility" >
<group id="CreateLoadModel"
label="Create/Load Model">
<button id="createmodelbutton" label="Create New Model"
screentip="Text" onAction="OnCreateModel"
supertip="Create a new Model"
imageMso="GroupSmartArtCreateGraphic"/>
<button id="loadmodelbutton" label="Load Existing Model"
screentip="Text" onAction="OnLoadModel"
supertip="Load an Exisitng Model"
imageMso="FileOpen"/>
</group>
MainRibbon.cs
public bool setVisbility(Office.IRibbonControl control)
{
int nWorkbooks = Globals.ThisAddIn.Application.Workbooks.Count;
if (nWorkbooks == 0)
{
return false;
}
if (Globals.ThisAddIn.Application.ActiveWorkbook != null && Globals.ThisAddIn.Application.ActiveWorkbook.Name == "MDS.xlsm")
{
return true;
}
else
{
return false;
}
}
AddIn.cs
private void ThisAddIn_Startup(object sender, EventArgs e)
{
this.Application.WorkbookActivate += Application_WorkbookActivate;
this.Application.WorkbookOpen += new Microsoft.Office.Interop.Excel.AppEvents_WorkbookOpenEventHandler(Application_WorkbookOpen);
}
private void Application_WorkbookActivate(Workbook Wb)
{
MainRibbon.ribbon.Invalidate();
}