Настройка видимости вкладки на основе файла рабочей книги, открытого на ленте VSTO Excel - PullRequest
0 голосов
/ 10 января 2020

У меня есть приложение VSTO и MainRibbon. xml Я использую обработчик getVisible, чтобы определить, должна ли быть видима вкладка или нет. Метод setVisbility вызывается в MainRibbon.cs. Я пытаюсь установить видимость вкладки в true, если имя файла / рабочей книги называется «Template.xlsm». В противном случае я не хочу показывать следующую вкладку.

    <?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="Ribbon_Load" >
  <ribbon >
    <tabs>
      <tab idMso="TabAddIns" label="M Template" 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>





        public bool setVisbility(Office.IRibbonControl control)
    {

        var name = Globals.ThisAddIn.Application.ActiveWorkbook.FullName;

            if (Globals.ThisAddIn.Application.ActiveWorkbook != null &&
            Globals.ThisAddIn.Application.ActiveWorkbook.Name == "Template.xlsm")
            {
            return false;
            }

            else
            {
            return true;
            }


    }

Все, что я в настоящий момент запускаю приложение 'Globals.ThisAddIn.Application.ActiveWorkbook.Name', не имеет значения NULL. Это потому, что приложение Excel открывается без нажатия на файл, чтобы открыть. Однако, когда я нажимаю на нужный файл - он возвращается в этот метод setVisibility, но он все еще утверждает, что объект не определен. Как я могу установить для true / false значение visibilitty на основе открытой книги Excel?

1 Ответ

1 голос
/ 10 января 2020

Проблема возникает из-за того, что setVisibility запускается до загрузки рабочей книги. То есть setVisibility будет работать при загрузке надстройки.

Одним из решений является добавление проверки, загружена ли какая-либо рабочая книга с помощью Workbooks.Count, а затем обновление видимости при каждой активации рабочей книги:

    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 == "Template.xlsm")
        {
            return true;
        }
        else
        {
            return false;
        }
    }

А затем в свой метод ThisAddIn_StartUp добавьте обработчик событий для активированной книги:

this.Application.WorkbookActivate += Application_WorkbookActivate;

Затем, когда книга активирована, принудительно подтвердите ленту следующим образом:

    private void Application_WorkbookActivate(Workbook Wb)
    {
        RibbonClass.RibbonInstance.Invalidate()
    }

В зависимости от вашего названия курса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...