Шаблон VSTO Excel не загружается при открытии других файлов EXCEL - PullRequest
0 голосов
/ 26 февраля 2019

Есть проблема.У меня есть шаблон VSTO Excel (c #).Этот работает отлично, но если с ним работает другой файл Excel, то происходит что-то загадочное.После выхода из надстройки я могу t enter to it again until i закрыть другие файлы Excel.Я думал, что это зависело от неправильного способа выхода из надстройки, но я попробовал следующие способы, которые не решили мою проблему:

  private void ThisWorkbook_Shutdown(object sender, System.EventArgs e)
{
    Application.Quit();
    GC.Collect();
    GC.WaitForPendingFinalizers();
    GC.Collect();
    GC.WaitForPendingFinalizers();
}

1 Ответ

0 голосов
/ 26 февраля 2019

Полагаю, вы создали настройку на уровне документа.Это означает, что вы увидите, что ваши кнопки / код работают только для рабочей книги one .Если вы действительно хотите, чтобы ваша лента была доступна только для некоторых типов ваших книг, создайте шаблон книги xltx.( не xlsx, xlsb или xlsm ) Все рабочие книги, созданные на основе вашего шаблона, будут иметь пользовательские функции.Пожалуйста, обратитесь к этому руководству от Microsoft - Начните программировать настройки на уровне документа для Excel

Концепция такова.

  1. Вы создаете настройку шаблона VSTO в Visual Studio
  2. Создайте свою ленту, напишите код и создайте свой проект
  3. В вашем Выпуске В папке вы получите свой шаблон Excel, например ExcelTemplate.xltx
  4. Распространите этот файл среди своих клиентов
  5. Каждый раз, когда кто-то создает новую книгу из вашего шаблона, он будет иметь ваши настройки, но стандартные файлы Excelне будет

Если честно, я думаю, что за многие годы я создал только один такой проект (обычно я делаю надстройки VSTO).Я не знаю, как вы будете управлять обновлениями / исправлениями ошибок, в то время как вы или ваши клиенты уже могут создавать тысячи файлов на основе одной версии вашего шаблона => заранее продумать систему обновления логики / управления версиями.Кажется, я помню, что у одного проекта, который я делал, были проблемы с запуском кода на компьютере, не принадлежащем разработчику.Я бы сказал, что мне пришлось вручную настроить реестр, чтобы он заработал, но он может измениться, это было действительно 5-6 лет назад ( может быть, даже больше )

Вы также можете рассмотреть добавление VSTO-в и установите видимость ( обратные вызовы ленты ) вашей ленты на основе некоторого свойства документа и т. д. Таким образом, у вас будет надстройка, которая будет загружаться каждый раз при загрузке Excel, но на основе некоторых внутренних проверок, которые она выполнитЛента видимая или скрытая.

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        Globals.ThisAddIn.Application.WorkbookOpen += Application_WorkbookOpen;
        Globals.ThisAddIn.Application.WorkbookActivate += Application_WorkbookActivate;
    }

    private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
    {
        Globals.ThisAddIn.Application.WorkbookOpen -= Application_WorkbookOpen;
        Globals.ThisAddIn.Application.WorkbookActivate -= Application_WorkbookActivate;
    }

    private void Application_WorkbookActivate(Excel.Workbook Wb)
    {
        var passThisValueToRibbonCallback = IsSupportedDocument(Wb);
    }

    private void Application_WorkbookOpen(Excel.Workbook Wb)
    {
        var passThisValueToRibbonCallback = IsSupportedDocument(Wb);
    }

    /// <summary>
    /// An example how to check if opened/activated document is 'your' document
    /// </summary>
    /// <param name="workbook"></param>
    /// <returns></returns>
    private bool IsSupportedDocument(Excel.Workbook workbook)
    {
        var props = workbook.CustomDocumentProperties;
        try
        {                
            var myCustomProperty = props.Item["myPropertyThatWillBeJustInMyWorkbooks"];
            return true;
        }
        catch (Exception)
        {
            return false;
        }
    }

Проверьте также Функции, доступные в приложении Office и типе проекта

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