Методика добавления ссылки на COM-взаимодействие Office в Visual Studio заключается в следующем:
- использованная литература
- Добавить ссылку
- Выберите вкладку COM.
- Выберите Библиотека объектов Microsoft Office 11.0.
И появляется ссылка с волшебным названием:
Microsoft.Office.Core
В файле Project.csproj
представлены подробные сведения о ссылке:
<COMReference Include="Microsoft.Office.Core">
<Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid>
<VersionMajor>2</VersionMajor>
<VersionMinor>3</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>primary</WrapperTool>
<Isolated>False</Isolated>
</COMReference>
И проект проверен в системе контроля версий, и все в порядке.
Затем разработчик с Office 2007 получает проект из системы управления версиями и не может создать его, поскольку такой ссылки не существует.
Он (то есть я) проверяет файл .csproj, удаляет ссылку на
Microsoft Office 11.0 Object Library
и повторно добавляет ссылку на COM как
Microsoft Office 12.0 Object Library
И волшебным образом появляется именованная ссылка:
Microsoft.Office.Core
В файле Project.csproj
представлены подробные сведения о ссылке:
<COMReference Include="Microsoft.Office.Core">
<Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid>
<VersionMajor>2</VersionMajor>
<VersionMinor>4</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>primary</WrapperTool>
<Isolated>False</Isolated>
</COMReference>
И проект проверен в системе контроля версий, и все в порядке.
Затем разработчик с Office 2003 получает проект из системы управления версиями и не может его построить, поскольку такой ссылки не существует.
Он (т.е. не я) проверяет файл .csproj, удаляет ссылку на
Microsoft Office 12.0 Object Library
и повторно добавляет ссылку на COM как
Microsoft Office 11.0 Object Library
И волшебным образом появляется именованная ссылка:
Microsoft.Office.Core
В файле Project.csproj
представлены подробные сведения об этой ссылке:
<COMReference Include="Microsoft.Office.Core">
<Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid>
<VersionMajor>2</VersionMajor>
<VersionMinor>3</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>primary</WrapperTool>
<Isolated>False</Isolated>
</COMReference>
И проект проверен в системе контроля версий, и все в порядке.
Затем проект собирается, записывается на компакт-диски и отправляется клиентам, у которых установлен Office 2007.
И не все хорошо.
В былые времена (то есть до того, как .NET DLL ад), мы могли ссылаться на объекты Office, используя независимый от версии ProgID, то есть:
"Excel.Application"
который преобразуется в clsid установленного Office, например
{00024500-0000-0000-C000-000000000046}
из которых затем создается класс с использованием вызова COM (языковой псевдокод):
public IUnknown CreateOleObject(string className)
{
IUnknown unk;
Clsid classID = ProgIDToClassID(className);
CoCreateInstance(classID, null,
CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER,
IUnknown, out unk);
return unk;
}
Вопросы
1) Каков утвержденный метод автоматизации установленных приложений Office?
2) Что такое Office 2003 Primary Interop Сборки полезны для?
3) Если я использую основные сборки взаимодействия Office 2003, нужно ли мне устанавливать Office 2003?
4) Если я использую основные сборки взаимодействия Office 2003, будут ли мои клиенты навсегда привязаны к Office 20003?
5) Есть ли офис? 2007 Основные сборки взаимодействия?
6) Если я устанавливаю основные сборки взаимодействия Office 2007, должен ли я установить Office 2007?
7) Что плохого в использовании стандартного COM-взаимодействия для работы с Excel, Word или Outlook? например.:
[ComImport]
[Guid("00024500-0000-0000-C000-000000000046")]
public class Excel
{
}
8) Чего добьешься, если добавишь
- Ссылка на элементы на вкладке COM,
- в отличие от использования [ComImport],
- вместо использования основных сборок взаимодействия Office 2007?
9) Идентично ли добавление ссылки с помощью вкладки COM использованию COM-взаимодействия, за исключением того, что для ее просмотра требуется библиотека типов?
10) Являются ли основные сборки взаимодействия Office 2003 обратно и вперед совместимы с: - Office 14 - Office 2007 - Office 2003 - Office XP - Office 2000 - Office 97 - Office 95
Если заказчик и разработчик установят новую версию Office, будет ли она работать?
11) Должны ли мы поставлять первичные сборки взаимодействия Office 2003 с нашим приложением?
12) Должен ли заказчик установить основные сборки взаимодействия Office 2003, прежде чем он сможет использовать наше приложение?
13) Если заказчик устанавливает основные сборки взаимодействия Office 2003, должен ли он иметь установленный Office?
14) Если заказчик устанавливает основные сборки взаимодействия Office 2003, должен ли он иметь установленный Office 2003?
15) Являются ли основные сборки взаимодействия Office 2003 бесплатной облегченной распространяемой версией Office 2003?
16) Если на моем компьютере для разработки установлен Office 2007, могу ли я использовать PIA Office 2003 и отправить заказчику с установленным Office XP?