Visual Studio 2008 Office Interop 2003 против 2007 - PullRequest
5 голосов
/ 18 февраля 2010

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

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

1) Требуется, чтобы инструмент был доступен как в Excel 2003, так и в 2007 году.

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

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

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

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

Спасибо.

1 Ответ

4 голосов
/ 18 февраля 2010

Существует две опции:

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

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

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 для совместного использования кода между двумя проектами надстроек.

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