Полагаю, вы создали настройку на уровне документа.Это означает, что вы увидите, что ваши кнопки / код работают только для рабочей книги one .Если вы действительно хотите, чтобы ваша лента была доступна только для некоторых типов ваших книг, создайте шаблон книги xltx
.( не xlsx, xlsb или xlsm ) Все рабочие книги, созданные на основе вашего шаблона, будут иметь пользовательские функции.Пожалуйста, обратитесь к этому руководству от Microsoft - Начните программировать настройки на уровне документа для Excel
Концепция такова.
- Вы создаете настройку шаблона VSTO в Visual Studio
- Создайте свою ленту, напишите код и создайте свой проект
- В вашем Выпуске В папке вы получите свой шаблон Excel, например
ExcelTemplate.xltx
- Распространите этот файл среди своих клиентов
- Каждый раз, когда кто-то создает новую книгу из вашего шаблона, он будет иметь ваши настройки, но стандартные файлы 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 и типе проекта