VSTO: как добавить пользовательское меню в меню файла Excel

#excel #vsto #excel-addins

#excel #vsto #excel-дополнения

Вопрос:

Используя компонент ленты, я добавил меню файлов, но оно не отображается в Excel после выполнения, но появляется, когда я добавляю кнопку.

1.Is можно ли добавить компонент меню в меню файла? введите описание изображения здесь

2. Когда я добавляю кнопку, она отображается в разделе Надстройки, возможно ли показать это перед информацией (пожалуйста, обратитесь к изображению)? введите описание изображения здесь
введите описание изображения здесь

Комментарии:

1. Вы используете VB или C # в качестве типа проекта?

Ответ №1:

Вот один из способов сделать это, используя ленточный XML и вставив пользовательскую вкладку после вкладки TabRecent «Открыть». Идентификаторы элементов управления пользовательского интерфейса Microsoft Office Fluent доступны только для Office 2016. Я не мог приступить TabInfo к работе.

Вот ссылки, которые я нашел.

Ссылки на Backstage:

  • Главная = PlaceTabHome
  • Новое = TabOfficeStart
  • Открыть = TabRecent
  • Информация = TabInfo
  • Сохранить = FileSave
  • Сохранить как = TabSave
  • История = HistoryTab
  • Печать = TabPrint
  • Поделиться = TabShare , ShareDocument
  • Экспорт = TabPublish
  • Опубликовать = Publish2Tab
  • Закрыть = FileClose
  • Учетная запись = TabHelp
  • Обратная связь = TabOfficeFeedback
  • Параметры = TabOptions , ApplicationOptionsDialog

Код ленты XML

 <ribbon startFromScratch="false">
</ribbon>
<backstage>
  <tab id="grpMyMenu" label="Annotate" insertAfterMso="TabRecent" visible="true" firstColumnMaxWidth="500">
    <firstColumn>
      <group id="grpOne" label="Microsoft Snipping Tool">
        <primaryItem>
          <button
                id="btnSnippingTool"
                label="Snipping Tool"
                onAction="OnAction"
                getImage="GetButtonImage"
                screentip="Microsoft Snipping Tool"
                supertip="Snipping Tool is a screenshot utility included in Microsoft Windows. It can take screenshots of an open window, rectangular areas, a free-form area, or the entire screen."
                />
        </primaryItem>
        <topItems>
          <layoutContainer id="layoutOne" layoutChildren="horizontal">
            <labelControl id="ebox2" label="Snipping Tool is a screenshot utility included in Microsoft Windows. It can take screenshots of an open window, rectangular areas, a free-form area, or the entire screen." />
          </layoutContainer>
        </topItems>
      </group>
      <group id="grpTwo" label="Microsoft Problem Steps Recorder" >
        <primaryItem>
          <button
                id="btnProblemStepRecorder"
                label="Record Steps"
                onAction="OnAction"
                getImage="GetButtonImage"
                screentip="Microsoft Problem Steps Recorder"
                supertip="Problem Steps Recorder or PSR records the actions you take on your computer which you can then send to the person or group helping you with your computer problem."
                />
        </primaryItem>
        <topItems>
          <labelControl id="ebox3" label="Problem Steps Recorder or PSR records the actions you take on your computer which you can then send to the person or group helping you with your computer problem."/>
        </topItems>
      </group>
    </firstColumn>
  </tab>
</backstage>
 

C # Код

     public void OnAction(Office.IRibbonControl control)
    {
        string filePath = string.Empty;
        switch (control.Id)
        {
            case "btnSnippingTool":
                if (System.Environment.Is64BitOperatingSystem)
                {
                    filePath = @"C:WindowssysnativeSnippingTool.exe";
                }
                else
                {
                    filePath = @"C:Windowssystem32SnippingTool.exe";
                }
                System.Diagnostics.Process.Start(filePath);
                break;
            case "btnProblemStepRecorder":
                filePath = @"C:WindowsSystem32psr.exe";
                System.Diagnostics.Process.Start(filePath);
                break;
        }
    }

    public System.Drawing.Bitmap GetButtonImage(Office.IRibbonControl control)
    {
        switch (control.Id)
        {
            case "btnProblemStepRecorder":
                return Properties.Resources.problem_steps_recorder;
            case "btnSnippingTool":
                return Properties.Resources.snipping_tool;
            default:
                return null;
        }
    }
 

Скриншот вкладки файла «Backstage»

скриншот

Комментарии:

1. Большое вам спасибо, время и усилия, которые вы потратили на реагирование на сообщение, оценены по достоинству.

2. Не беспокойтесь, в любое время. У меня также есть несколько примеров проектов, если это поможет. github.com/Excel-projects