Автоматизации Office с помощью Visual C++

Переводы статьи Переводы статьи
Код статьи: 196776 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Аннотация

Данная статья содержит ответы на часто задаваемые вопросы, касающиеся автоматизации в корпорацию Майкрософт Office из Visual C++.

Дополнительная информация

Содержание

  1. Что такое автоматизация?
  2. Я новичок в автоматизации, где найти хорошие ресурсы для дополнительного обучения?
  3. Существуют различные способы автоматизации можно использовать?
  4. Что такое COM
  5. Как присоединить к запущенному экземпляру приложения Office?
  6. Как передавать необязательные параметры?
  7. Как перехват событий, предоставляемых приложениями Office?
  8. Мой код автоматизации выполняется слишком медленно. Как ускорить выполнение действий?
  9. Что означают эти значения огромные ошибки, например -2147352573 или 0x80030002,
  10. Что такое библиотека типов
  11. Мой код автоматизации в сотрудничестве с Microsoft Excel 95, но дает сбой Microsoft Excel 97. Почему?
  12. Почему does приложение, которое я автоматизация остаются в памяти после моей программы закончено?
  13. Я знаю, что я хочу сделать как пользователь приложения Microsoft Office, но как сделать это программным путем с помощью автоматизации?
  14. Можно автоматизировать внедренные приложения Microsoft Office.
  15. Как получить доступ к моей свойства документа в документе Microsoft Office?

Вопросы и ответы

  1. Что такое автоматизация?

    Технология автоматизации (ранее называвшейся OLE-автоматизацией) позволяет преимущества функциональных возможностей существующих программ и внедрение его в приложениях. Например можно использовать Microsoft Проверка орфографии и грамматики в приложении функциональных возможностей в приложении Word без Microsoft Word отображается для пользователей. Можно даже использовать все Microsoft Excel диаграммы, печати и данные средства анализа. Это технологии могут значительно упростить и ускорить процесс разработки.
  2. Я новичок в автоматизации, где найти хорошие ресурсы для дополнительного обучения? Глава 24 Дэвид Kruglinski "Внутри Visual C++" (ISBN:1-57231 - 565 - 2) предоставляет общие сведения, а также среди нескольких замечательных примеров. Кроме того, База знаний корпорации Майкрософт является хорошим источником данных. Это самой статье является хорошим началом, и можно найти более конкретные ссылки в следующей статье Microsoft Knowledge Base:
    152023 Обнаружение ресурсов для изучения OLE-автоматизации
    Если вы предпочитаете обучения на примере, обратитесь к следующей статье в базе знаний Майкрософт:
    179706 Методические УКАЗАНИЯ Использование MFC для автоматизации Excel & создания и форматирования новой книги
  3. Существуют различные способы автоматизации можно использовать?

    Существует три основных способа автоматизации можно использовать: MFC, #import, и C/C++:

    • С MFC с помощью Visual C++ классов для создания программы-оболочки библиотеки типов классов» из Microsoft Office. Эти классы как а также другие классы MFC, например COleVariant, COleSafeArray, COleException, упрощают выполнение задач автоматизации. Этот метод является обычно предпочтительнее других и большинство Microsoft Примеры базы знаний с помощью MFC.
    • #import, новая директива, ставшие доступными с Visual C++ версии 5.0 Создает VC ++ «смарт-указатели» из указанной библиотеки типов. Это очень мощный, но часто не рекомендуется из-за ссылок Подсчет проблем, которые обычно возникают при использовании Microsoft Приложения Office.
    • C/C++ автоматизации во многом сложнее, но иногда необходимо Избегайте издержки с MFC, или проблемы с #import. По сути вы Работа с API, такие как CoCreateInstance() и COM-интерфейсов Например, IDispatch и IUnknown.
    Важно отметить, что существуют некоторые различия между Автоматизация из C++ по сравнению с простой C, так как была разработана на основе COM класс C++. Для получения дополнительных сведений обратитесь к следующей статье пример C базе знаний Майкрософт:
    181473 Методические УКАЗАНИЯ: Использование OLE-автоматизации из приложения C
  4. Что такое COM

    Автоматизация основан на модели компонентных объектов (COM). COM — Архитектура стандартного программного обеспечения на основе интерфейсов и предназначены для код разделено автономными объектами. Его можно рассматривать как расширение из парадигмы программирования объект ориентированного (ООП), но применимо к отдельным приложениям. Каждый объект предоставляет набор интерфейсов и все связь с объектом, например инициализацией, уведомления, и Передача данных происходит через эти интерфейсы.

    COM является также ряд служб, предоставляемых библиотек динамической компоновки (DLL) При установке операционной системы. Автоматизация использует многие из этих службы. Одним из примеров является служба «Marshalling», какие пакеты вызовы функций-членов сервера клиентского приложения приложения, интерфейсы и передает те их аргументов для серверное приложение. Он оказывается, что интерфейсы сервера в пространстве памяти клиента, который не так при клиент — .exe выполняется внутри собственного пространства процесса. Также упаковки Получает возвращаемые значения с помощью методов сервера через процесс границы и безопасно в руки вызова клиента. Существует многие другие службы, необходимые для автоматизации, предоставленные различные библиотеки COM. Источники информации о тех «Внутри Ole - е издание», Kraig Brockschmidt, ISBN 1-55615-843-2 "Внутри COM», Dale Rogerson - ISBN 1-57231-349-8 и"автоматизации Справочник программиста,"ISBN 1-57231-584-9.
  5. Как присоединить к запущенному экземпляру приложения Office?

    Используйте GetActiveObject() API. Серверы автоматизации регистрируются в ROT (в текущей таблице объектов), через RegisterActiveObject() API. Клиенты автоматизации можно получить в запущенный экземпляр с кодом:
          // Translate server ProgID into a CLSID. ClsidFromProgID
          // gets this information from the registry.
          CLSID clsid;
          CLSIDFromProgID(L"Excel.Application", &clsid);  
    
          // Get an interface to the running instance, if any..
          IUnknown *pUnk;
          HRESULT hr = GetActiveObject(clsid, NULL, (IUnknown**)&pUnk);
    
          ASSERT(!FAILED(hr));
    
          // Get IDispatch interface for Automation...
          IDispatch *pDisp;
          hr = pUnk->QueryInterface(IID_IDispatch, (void **)&pDisp);
          ASSERT(!FAILED(hr));
    
          // Release the no-longer-needed IUnknown...
          pUnk->Release();
    
    						
    ПРИМЕЧАНИЕ: Если существует несколько экземпляров запуска приложения Office, которую необходимо присоединить, только можно присоединить к первому экземпляру, осуществлялся с помощью API-интерфейса GetActiveObject().

    Теоретически, может выполнять итерацию ROT для каждого отдельного экземпляра, но приложения Office не регистрируют себя Если другой экземпляр уже в таблице ROT, поскольку моникер для себя всегда остается одинаковым (его Невозможно различающиеся в любом случае). Это означает, что нельзя присоединить любой экземпляр, кроме первой. Тем не менее поскольку приложения Office также зарегистрировать свои документы в таблице ROT, можно успешно присоединить другие экземпляры с помощью итерации ROT, в поисках определенного документа Присоединение к нему, а затем получение от него объект приложения. Нет в следующей статье базы знаний Майкрософт для кода итерации в таблице ROT и ищет имя документа:
    190985 Методические УКАЗАНИЯ: Получить IDispatch Excel или документ Word из OCX
    Не придется сделать это для PowerPoint, так как это одно- экземпляр приложения; может иметь только один экземпляр запущен.
  6. Как передавать необязательные параметры?

    Некоторые методы имеют параметры «необязательные». В Visual Basic можно случайного исключить их при вызове метода. Тем не менее при вызове с Visual C++, необходимо передать специальный ВАРИАНТ, в поле .vt — VT_ERROR, DISP_E_PARAMNOTFOUND и .scode поле. То есть:
          // VARIANT used in place of optional-parameters.
          VARIANT varOpt;
          varOpt.vt = VT_ERROR;
          varOpt.scode = DISP_E_PARAMNOTFOUND;
    						
    Это действительно каким образом Visual Basic фоновый.
  7. Как перехват событий, предоставляемых приложениями Office?

    По сути реализуют интерфейс событий, чтобы перехватить ( "приемник") и установка вспомогательное соединение с приложением ( «Источник»). В следующей статье дается пошаговое описание примеров для Microsoft Word:
    183599 Методические УКАЗАНИЯ: Перехвата событий приложения Microsoft Word 97 с набором, с помощью VC ++
    В общем случае для установки вспомогательное соединение, вы получаете сервера IConnectionPointContainer и вызвать FindConnectionPoint() с IID интерфейс событий. Это обеспечивает интерфейс IConnectionPoint и Осталось является вызов выполнить Advise() для с экземпляром события интерфейс. Сервер будет затем вызов через этот интерфейс, когда Эти события происходят.
  8. Мой код автоматизации выполняется слишком медленно. Как ускорить выполнение действий?

    Является наиболее распространенной причиной проблем скорости при автоматизации повторяющихся чтение и запись данных. Это типично для автоматизации Excel Клиенты. Тем не менее большинство людей не знают о том, что эти данные могут быть обычно все письменные или чтения на один раз, используя массив SAFEARRAY. Корпорации Майкрософт см. Статьи базы знаний Майкрософт Дополнительные сведения и примеры информативные:
    186120 Методические УКАЗАНИЯ: Использование MFC для автоматизации Excel и заполнение диапазона ячеек с помощью массива
    186122 Методические УКАЗАНИЯ: Использование MFC для автоматизации Excel & получения массива из диапазона
    179706 Методические УКАЗАНИЯ: Использование MFC для автоматизации Excel и создания и форматирования новой книги
    Кроме того важно отметить, что использование буфера обмена может Иногда повысить производительность. Например можно скопировать данные буфер обмена, а затем сообщить серверу, чтобы вставить с помощью автоматизации. Или вице- наоборот; сообщить серверу, чтобы скопировать в буфер обмена и вставить в ваш приложение.
  9. Что делают эти значения огромные ошибки, например -2147352573 или 0x80030002 означает ли это?

    Эти значения называются значения HRESULT и определены в файле заголовка winerror.h. В номера настолько велики, поскольку первый бит представляет ли он Это результат ошибки. Можно использовать служебную программу ErrLook.Exe, поставляемой вместе с Visual C++ для перевода их в осмысленные описания.

    Если требуется, чтобы программно получить описание ошибки, вы можно использовать FormatMessage() API. Следующий набор знаний Майкрософт см. Дополнительные сведения и примеры использования для статей базы знаний FormatMessage():
    186063 ИНФОРМАЦИЯ: Перевод ошибок автоматизации для VB/VBA
    122957 Пример: Decode32 и Decode16 OLE Ошибка декодера средств кода
    ПРИМЕЧАНИЕ: Если вы используете Visual C++ 6.0 и иметь переменную, содержащую это значение в окне отладки, добавить ", hr" (без кавычек) в него Visual C++ можно сдвинуть!
  10. Что такое библиотека типов

    Файл заголовка C/C++ аналогично библиотеки типов. Он содержит интерфейсы, методы и свойства, которые публикации сервера. Вы можете Просмотр библиотеки типов с помощью средства просмотра объектов OLE/COM (Oleview.exe), вместе с Visual C++. Ниже приведен список файлов библиотеки типов для Microsoft Office 2000, 95 и 97:
    
           Office Application      | Type library
           ------------------------+----------------
           Word 95 and prior       | wb70en32.tlb
           Excel 95 and prior      | xl5en32.olb
           Powerpoint 95 and prior | Powerpoint.tlb
           Access 95 and prior     | msaccess.tlb
           Binder 95               | binder.tlb
           Schedule+               | sp7en32.olb
           Project                 | pj4en32.olb
           Team Manager            | mstmgr1.olb
           Word 97                 | msword8.olb
           Excel 97                | excel8.olb
           Powerpoint 97           | msppt8.olb
           Access 97               | msacc8.olb
           Binder 97               | msbdr8.olb
           Graph 97                | graph8.olb
           Outlook 97              | msoutl8.olb
           Outlook 98              | msoutl85.olb
           Word 2000               | msword9.olb
           Excel 2000              | excel9.olb
           Powerpoint 2000         | msppt9.olb
           Access 2000             | msacc9.olb
           Outlook 2000            | msoutl9.olb
           Word 2002               | msword.olb
           Excel 2002              | excel.exe
           Powerpoint 2002         | msppt.olb
           Access 2002             | msacc.olb
           Outlook 2002            | msoutl.olb 
    
    
    						
  1. Мой код автоматизации в сотрудничестве с Microsoft Excel 95, но дает сбой в Excel 97. Что происходит?

    Объектная модель Excel сделаны существенное изменение в версии 95 97. Excel 95 реализованы все методы и свойства в одном Реализация интерфейса IDispatch. Это означало, что часто можно назвать методы, предназначенные для объекта X из Y объекта. Это не было хорошего дизайна Поэтому в Office 97, каждый объект имеет свой собственный отдельный Idispatch. Реализация. Это означает, что при запросе метода или свойства из объект X из Y, отдельный объект появляется ошибка 0x80020003, -2147352573, «Член не найден». Чтобы избежать этой ошибки, необходимо сделать что вызывает что базового интерфейса IDispatch, выполняемых из является одним из семантически правильных. Следующий набор знаний Майкрософт см. Для получения дополнительных сведений статей базы знаний:
    172108 Методические УКАЗАНИЯ: Устранение неполадок «Участник не найден» 0x80020003 ошибка
  2. Приложение, которое я автоматизация остается в памяти после моей программы завершено. Что происходит?

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

    • Если вы используете #import, скорее всего, может выполняться в один из связанных с ним ошибки подсчета ссылок. Зачастую ошибки можно обойти, но обычно предпочтительным является использование одной другие методы автоматизации. #import не работает очень хорошо с приложениями Office поскольку его библиотеки типов и использование достаточно сложны. Кроме того трудно такие проблемы подсчета ссылок для отслеживания из-за большого уровня интерфейса COM-вызовов При использовании #import фоновый.
    • Проверьте, если вы вызываете методы, такие как Open или создать возвращающие IDispatch * (LPDISPATCH) и без учета возврата значение. Если вы являетесь затем вы оставления этот возвращенный интерфейс и потребуется изменить код таким образом, чтобы отпустить ее, когда нет нужны.
    • Постепенно закомментировать части кода, пока проблема исчезает, а затем добавить его обратно в режим внимательно отслеживать место проблема начинается.
    • Обратите внимание, что некоторые приложения будет оставаться выполняется, если у пользователя «затронуты» приложения. В этом случае при автоматизации, Затем приложение, вероятно, останется после запуска. В Приложения Office имеют свойство «UserControl» в приложении Объект, который пользователь может считывать и записывать изменить это поведение.
    • Кроме того некоторые приложения решено остаться, если недостаточно возникло «действие» пользовательского интерфейса. Если планируется приложение, чтобы выйти из программы, затем вызвать его метод Quit() для приложения объект. Подсчета слов отключается вне зависимости от его ссылку, при Закройте называется. Это не ожидаемое поведение COM. Microsoft Excel, однако правильно просто скрыть сам но оставаться выполняется, пока все невыполненные интерфейсы освобождаются. В общем случае следует освободить все невыполненные ссылки, а только вызов Quit(), если предполагается Чтобы завершить работу приложения.
  3. Я знаю, что я хочу сделать как пользователь приложения Office, но как сделать это программным способом посредством автоматизации?

    Что вас интересует это объекты, методы и свойства, которые необходимо использовать. Лучший способ научиться перемещаться объектной модели — Word, Excel и Powerpoint, основываясь на то, что нужно для этого имени пользователя, Чтобы использовать средство записи макросов. Просто выберите «Начать запись» Macro\ Выполнить задачу, которую вы заинтересованы в меню Сервис выберите команду Macro\ «остановить запись.» После завершения записи, выберите Macro\Macros в меню Сервис выберите макрос, выписанными, а затем нажмите кнопку Изменить. Это может занять в созданный код VBA, который предстоит выполнить Задача записанный вами. Помните, записанный макрос будет лучшее делает возможным код в большинстве случаев, но его очень хорошо для быстрого Пример.
  4. Можно автоматизировать внедренные приложения Office

    Абсолютно. Взятка является получение указатель IDispatch: предоставляется Примечание Visual C++ технической 39 (TN039). Корпорации Майкрософт см. Пример с пошаговыми инструкциями в статье базы знаний Майкрософт:
    184663 Методические УКАЗАНИЯ: Внедрение и автоматизировать электронную таблицу Microsoft Excel с использованием библиотеки MFC
  5. Как получить доступ к моей свойства документа в документ Office?

    Свойства документа доступны с помощью автоматизации, или непосредственно через IPropertyStorage. Следующие статьи базы знаний Майкрософт демонстрации каждого метода:
    179494 Методические УКАЗАНИЯ: Использование автоматизации для извлечения встроенных свойств документа
    186898 Методические УКАЗАНИЯ: Чтение свойств составных документов непосредственно с VC ++

Свойства

Код статьи: 196776 - Последний отзыв: 20 мая 2013 г. - Revision: 6.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Visual C++ 2008 Express Edition
  • Microsoft Project 2000 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Access 97 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft PowerPoint 97 Standard Edition
  • Microsoft Outlook 97 Standard Edition
  • Microsoft Word 97 Standard Edition
  • Microsoft Access 2000 Standard Edition
  • Microsoft PowerPoint 2000 Standard Edition
  • Microsoft Outlook 2000 Standard Edition
  • Microsoft Word 2000 Standard Edition
  • Microsoft Access 2002 Standard Edition
  • Microsoft Excel 2002 Standard Edition
  • Microsoft PowerPoint 2002 Standard Edition
  • Microsoft Word 2002 Standard Edition
  • Microsoft Outlook 2002 Standard Edition
Ключевые слова: 
kbsweptvs2008 kbautomation kbmt KB196776 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке: 196776

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com