Office Visual Studio 2008 Interop 2003 по сравнению с 2007

Я разрабатываю дополнение для Microsoft Excel, с помощью Visual Studio.NET 2008.

Дополнение создает единственную кнопку на панели инструментов, которая может быть нажата для запуска формы, которая может привыкнуть к добавленным стоимостям от базы данных в ячейки активной электронной таблицы.

1) Требование - то, что инструмент доступен и в Excel 2003 и в в 2007.

2) Другое требование то, что, в Excel 2007, кнопка запуска быть на ее собственной ленточной вкладке.

Из-за ленточного требования вкладки я создал два отдельных дополнительных проекта Excel в рамках Visual Studio - один для каждой версии офиса.

Однако, потому что эти два дополнения должны сослаться на два других Office. Блоки Interop и проект, обеспечивающий форму запросов базы данных, могут только сослаться один, я нахожу меня не могущим совместно использовать этот третий блок между двумя дополнительными проектами.

У кого-либо есть простое решение, чем поддержание отдельной копии кода формы для каждой из двух дополнительных версий?

Спасибо.

5
задан mcoolbeth 18 February 2010 в 16:35
поделиться

1 ответ

Есть два варианта:

Вариант 1: Не ссылаться на какие-либо сборки взаимодействия в общем проекте, предоставляющем запрос к базе данных. Используйте интерфейсы и внедрение зависимостей , чтобы предоставить требуемый код взаимодействия с Excel из проектов надстроек.

Позвольте мне привести пример: предположим, что ваш общий проект должен выполнять некоторую функцию func , которой нужен доступ к библиотекам взаимодействия.Вы можете создать интерфейс в своем общем проекте:

public interface ExcelInterface {
    void func();
} 

В своих проектах надстройки вы предоставляете реализации для этого интерфейса:

class Excel2003Interface : ExcelInterface { // located in your Excel 2003 Addin
    void func() {
        // the code here can use the Excel 2003 interop reference
    }
}

Аналогичным образом вы создаете Excel2007Interface в своей надстройке Excel 2007.

Затем при открытии формы в общем проекте вы передаете экземпляр Excel2003Interface или Excel2007Interface , который используется формой для вызова func ]:

void DoSomething(ExcelInterface iface) {  // this is in your shared project
    ...
    iface.func();
    ...
}

Вариант 2: Используйте малоизвестную функцию файла ссылок Visual Studio для совместного использования кода двумя проектами надстроек.

4
ответ дан 15 December 2019 в 00:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: