Arhn - архитектура программирования

Как использовать Office из Visual Studio C #?

Методика добавления ссылки на COM-взаимодействие Office в Visual Studio заключается в следующем:

  1. использованная литература
  2. Добавить ссылку
  3. Выберите вкладку COM.
  4. Выберите Библиотека объектов 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?


  • Извините, не могу проголосовать из-за отсутствия голосов. Но, безусловно, достойно. 31.12.2008

Ответы:


1

Ух ты, огромное количество вопросов. Я думаю, что в целом, если ваше приложение использует PIA, вы предполагаете, что у вашей целевой аудитории установлена ​​какая-то версия Office. PIA будут установлены в GAC, когда целевой пользователь установит Office. Если у них не установлен Office, то почему вы ориентируетесь на Office?

Да, DLL-файлы Office - это правильный способ автоматизировать Office. здесь есть список сборок, включая некоторые для Office 2007.

30.12.2008
  • PIA не устанавливаются при установке Office, в противном случае я смог бы создать решение. 31.12.2008
  • Я обнаружил, что PIA устанавливаются только при установке Office: IFF и Dotnet уже установлены, и вы специально выбираете установку желаемых опций Net Interoperability. Однако вы всегда можете запустить ремонтную установку и добавить их обратно. msdn.microsoft.com/en-us/library /aa679806(v=office.11).aspx Разработка Microsoft .NET для Microsoft Office 2003 Я обнаружил, что очень сложно определить, зарегистрированы ли уже PIA; Гакутил мог бы помочь, но я отказался от этого пути. 13.07.2012

  • 2

    Ответ - «Копировать локально» любую сборочную dll, которую вы получите для взаимодействия. Когда у вас есть сборочная dll в выходной папке, добавьте на нее ссылку и проверьте ее в системе управления версиями.

    Теперь у всех есть указанная сборочная dll.

    12.01.2009

    3

    вы используете VSTO (инструменты Visual Studio для офиса)?

    http://msdn.microsoft.com/en-us/office/aa905533.aspx

    30.12.2008
  • Нет, VSTO - это набор инструментов? Или это сайт поддержки, где можно задать вопросы на открытом форуме и получить ответы от других разработчиков? 31.12.2008

  • 4

    Старая ветка, и, вероятно, большинству людей понравится CopyLocal = True, но вот другой способ ... Используйте обе (или более ...? Думая об Office 2010, если проблема все еще существует ...) в файлы вашего проекта и либо проигнорируйте, либо просто скажите MSBuild игнорировать предупреждение «MSB3284» (библиотека не найдена). Так что включите это в свой файл .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>
    

    С последующим:

    <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>
    

    Мне было бы интересно узнать, предоставляет ли Microsoft для этого библиотеку NuGet - просто чтобы у всех был одинаковый подход. Я думаю, что это избавит людей от необходимости искать в Интернете эти ответы ... Я считаю, что это противоречит лицензии Microsoft Office, поэтому они единственные, кто ее предоставляет.

    Кстати, с локальной копией вы должны быть осторожны, чтобы не распространять эту библиотеку по ошибке.

    20.12.2011
  • Для вас, бедняги, которым по-прежнему нужны офисные библиотеки через десять лет после первоначального вопроса, Microsoft теперь предлагает пакет nuget. 08.12.2017
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..