Перейти до основного
Підтримка
Вхід
Вхід за допомогою облікового запису Microsoft
Увійдіть або створіть обліковий запис.
Вітаємо,
Виберіть інший обліковий запис.
У вас є кілька облікових записів
Виберіть обліковий запис, за допомогою якого потрібно ввійти.

Загальні відомості

У цій статті відповіді на поширені запитання, які стосуються автоматизації для Microsoft 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. Чому програми, які я маю автоматизації залишаються в пам'яті по закінченні моїй програмі?

  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 є добре джерело інформації. У цій статті, окремо, почніть, і ви можете знайти посилання на додаткові в такій статті бази знань Microsoft Knowledge Base:

    доступ до ресурсів для навчання OLE автоматизаціїЯкщо ви надаєте перевагу навчання, наприклад, див. в такій статті бази знань Microsoft Knowledge Base:

    -HOWTO використання MFC, автоматизації Excel і створювати та форматувати нової книги

  3. Чи існують різні способи, які можна використовувати автоматизації? Існує три основні способи, використання автоматизації: MFC, #import а C/C++:

    • З MFC створення "оболонка класи" тип бібліотеки Microsoft Office за допомогою Visual C++-ClassWizard. Ці класи, а також інші класи MFC, COleVariant, COleSafeArray, COleException, спростити завдання автоматизації. Цей спосіб рекомендується через інші і більшість приклади знань Microsoft Knowledge Base за допомогою пакета MFC.

    • #import, нові директиви, які стали з Visual C++-5.0, створює VC + + "смарт-посилання" з указаного типу бібліотеки. Це дуже потужний, але при цьому не рекомендується через посилання - підрахунку проблем, які зазвичай виникають при використанні програми Microsoft Office.

    • C/C++ автоматизації, так само, досить складно, але іноді необхідно, щоб уникнути, непрямі витрати, з MFC, або проблеми з #import. Загалом, роботи з такі інтерфейси API, як CoCreateInstance() та інтерфейси COM, IDispatch і IUnknown.

    Зауважте, що незначні відмінності автоматизації, з C++, у порівнянні з простою с, через те, що COM було розроблене C++ класу важливо. Щоб отримати додаткові відомості див. в такій статті в Microsoft Knowledge Base наприклад C:

    HOWTO: використання автоматизації 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. Сервери автоматизації реєструвати рот (запуск об'єкт таблиця), за допомогою 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, яку потрібно додати, лише можна надавати до першого, здійснюється за допомогою GetActiveObject() API. Теоретично, ви можете переміщення ГНИЛІ, для кожного екземпляра в окремих, але застосунки Office не реєструються, якщо інший екземпляр уже є в рот через те, що для себе прізвисько – однакова (він не зміг виділити все одно). Це означає, що не можна вкласти будь-який екземпляр, за винятком першого. Однак через те, що програми Office, також зареєструвати документи в рот, можна успішно приєднати до інших екземплярів за ітерації ГНИЛІ, потрібні для певного документа, підключення до нього, то отримання об'єкта Application від нього. Є код в такій статті бази знань Майкрософт ітерації рот та шукає ім'я документ:

    HOWTO: отримати IDispatch в документ Word або Excel до OCX.Не потрібно робити це для PowerPoint, через те, що це одноразові застосування; Ви можете мати тільки один раз, він працює.

  6. Як так, пройти додаткових параметрів? Деякі способи, мають "додаткових" параметрів. У Visual Basic можна випадково пропустити їх під час виклику методу. Однак, під час виклику з Visual C++ потрібно передати спеціальні варіант, .vt-поле, є VT_ERROR, і .scode поля DISP_E_PARAMNOTFOUND. Тобто:

          // VARIANT used in place of optional-parameters.      VARIANT varOpt;      varOpt.vt = VT_ERROR;      varOpt.scode = DISP_E_PARAMNOTFOUND;

    Це те, що робить Visual Basic заходи.

  7. Як, зловити події, який повідомив у програмах Office? Загалом ви здійснювати подій інтерфейс, який ви хочете зловити ("приймач") та настроювання питань підключення, за допомогою програми ("Джерело"). У наступній статті дає покрокові приклади для Microsoft Word:

    HOWTO: зловити застосунку Microsoft Word97 події, використовуючи VC + +Налаштувати питань підключення, ви отримати сервера IConnectionPointContainer та викликів FindConnectionPoint(), з IID події інтерфейсу. Це надає IConnectionPoint інтерфейс, і все, що залишається виклик Advise(), зі служб до події інтерфейсу. Сервер натисніть зателефонує через цей інтерфейс, якщо ці події відбуваються.

  8. Моя коду для автоматизації є дуже повільно. Як прискорити речі роботу? Загальною причиною проблеми швидкість, Автоматизація, є повторювані читання та записування даних. Це типовий Excel Автоматизація клієнтів. Проте, для більшості користувачів не відомо, що ці дані можна зазвичай написані або відразу, за допомогою SAFEARRAY. Див. такі статті бази знань Майкрософт за додатковою інформацією та інформаційні приклади:

    HOWTO: використання MFC для автоматизації Excel і заповнити діапазон масиву

    HOWTO: використання MFC для автоматизації Excel і отримати масив до діапазону

    HOWTO: використання MFC для автоматизації Excel а також створювати та форматувати нової книгиКрім того, важливо зазначити, що буфера обміну іноді можна підвищити продуктивність. Так, можна скопіювати дані до буфера обміну, то визначити сервер, щоб вставити за допомогою автоматизації. Або навпаки; дізнатися сервер копіювання до буфера обміну і вставте у вашому застосунку.

  9. Що робити, ці значення навантажувати помилки,-2147352573 або 0x80030002 означає? Ці значення також відомі як HRESULTs а також визначаються в winerror.h. Цифри, тому великого, тому що перший представляє, або не є помилка результат. Скористайтеся ErrLook.Exe програми, що постачається з Visual C++ перевести ці номери змістовне описи. Якщо ви хочете отримати програмним способом опис помилки, можна FormatMessage() API. Див. такі статті бази знань Майкрософт за додатковою інформацією та приклади на використання FormatMessage():

    інформація: перекладу автоматизації помилки для VB/VBA

    на зразок: Decode32 і Decode16 OLE помилку з кодом декодер засобиПримітка: Якщо ви використовуєте Visual C++ 6.0 і змінну, яка містить цей параметр у вікні налагодження, перегляньте, додайте ", hr" (без лапок) його мати Visual C++, переводити автоматично!

  10. Що таке бібліотека типу C/C++ файл-заголовок схожий до бібліотеки типів. Він містить інтерфейси, методи і властивостей, які публікує сервера. Можна переглядати з засобі об'єкт OLE/COM (Oleview.exe), що постачається з Visual C++, бібліотеки типів. Ось типу бібліотеки імен файлів, для Microsoft Office, 95, 97 та 2000: 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. Моя коду для автоматизації у співпраці з Excel 95, але помилка, що в Excel 97. Що відбувається? Об'єктна модель, для програми Excel, зроблені значну зміну версії 95-97. Microsoft Excel 95 реалізовано її методи і властивості в одному впровадження IDispatch. Це означає, що часто можна назвати способів, призначена для об'єкта X, Y від. Це не гарний дизайн, так і в Office 97, кожний об'єкт має власний окремо, Idispatch виконання. Це означає, що якщо запитати метод або властивість, від X з окремого об'єкта Y, ви отримаєте повідомлення про помилку 0x80020003,-2147352573, "член не знайдено." Щоб уникнути цієї помилки, потрібно переконатися, що основного інтерфейсу IDispatch роблять зі семантично правильний. Такі статті бази знань Майкрософт, щоб отримати додаткові відомості див.

    HOWTO: виправлення "Учасник не знайдено" 0x80020003 помилки

  2. Програми, які я маю автоматизації залишається в пам'яті по закінченні моїй програмі. Що відбувається? Найімовірніше, ви забули звільнити придбаного інтерфейс, і вам необхідно відслідковувати його вниз. Ось деякі загальні рекомендації, і шукає речі:

    • Якщо ви користуєтеся #import, швидше за все, може працювати в одному-підрахунок помилок, пов'язаних з нею. Іноді помилки можуть працювали навколо, але зазвичай особливо для використання одного з іншими способами автоматизації. #import не працює дуже добре з додатками Office, тому що його тип бібліотеки та використання досить складна. Крім того, такі проблеми з підрахунку посилання, важко визначити, тому що багато COM-дзвінків інтерфейс рівня заходи під час використання #import.

    • Перевірте, якщо ви є виклик, інші способи, відкрити або створити, що повернутися до IDispatch * (LPDISPATCH) і не значення. Якщо ви працюєте, потім ви відмовляються від цього повертається інтерфейсу та потрібно буде змінити код так, що ви відпустіть його, коли більше не потрібно.

    • Поступово коментарі розділи код, поки проблема зникає, а потім додайте його назад розважливо визначити проблему, де починається.

    • Зверніть увагу, що деякі програми залишиться працює, якщо користувач має"" застосунку. У такому випадку, під час автоматичного виберіть застосунок ймовірно, залишиться працює після цього. Офісні програми мають властивості "UserControl", застосунок об'єкт, який, ви можете читання та записування зміни.

    • Крім того, деякі застосунки вирішите працювати, якщо достатньо інтерфейс "дії" під час. Якщо застосунок, щоб закрити, які має, зателефонуйте її Quit(), спосіб застосування об'єкта. Word завершить незалежно від того, лічильник посилань на його після того, як називається вихід. Це не на COM-коректної. Microsoft Excel, однак, буде належним чином лише приховати себе, але працювати, доки всі списком інтерфейси, які випускаються. Загалом має звільнити всі списком посилання і лише зателефонувати Quit(), якщо ви маєте намір, щоб завершити роботу програми.

  3. Я знаю, що я хочу як користувач програми Office, але, як виконувати це програмним шляхом автоматизації? Те, що вас цікавлять є те, що об'єкти, методи та властивості потрібно використовувати. Найкращий спосіб, щоб дізнатися, як перейти до об'єктної моделі Word, Excel і Powerpoint, залежно від того, що ви хочете зробити імені користувача, є макрос. Просто виберіть Macro\ "Новий запис макросу" з меню "Знаряддя", виконання завдань, які вас цікавлять, а потім виберіть Macro\ "Зупинити записування". Після завершення записування, виберіть Macro\Macros, з меню "Знаряддя", виберіть макрос час, а потім натисніть Змінити. Столу згенерований код VBA, які буде виконувати, записані завдання. Майте на увазі, записаний макрос не буде найкраще можливе код у більшості випадків, але це робить добре, наприклад короткий.

  4. Можна автоматизувати вбудовані програми Office? Зовсім. Вказівник миші IDispatch отримує фокус: це дається Visual C++ технічні Примітка 39 (TN039). Див. таку статтю бази знань Майкрософт, наприклад крок за кроком:

    HOWTO: вбудовування та автоматизації книги Microsoft Excel з MFC

  5. Як отримати доступ до мого властивості документа в документі Office? Властивості документа доступні через автоматизацію, або безпосередньо IPropertyStorage. Кожного способу переконатися в такі статті в базі знань Майкрософт:

    HOWTO: отримання вбудовані властивості за допомогою автоматизації

    HOWTO: читання складений властивості безпосередньо з VC + +

Потрібна додаткова довідка?

Потрібні додаткові параметри?

Ознайомтеся з перевагами передплати, перегляньте навчальні курси, дізнайтесь, як захистити свій пристрій тощо.

Спільноти допомагають ставити запитання й відповідати на них, надавати відгуки та дізнаватися думки висококваліфікованих експертів.

Чи ця інформація була корисною?

Наскільки ви задоволені якістю мови?
Що вплинуло на ваші враження?
Натиснувши кнопку "Надіслати", ви надасте свій відгук для покращення продуктів і служб Microsoft. Ваш ІТ-адміністратор зможе збирати ці дані. Декларація про конфіденційність.

Дякуємо за відгук!

×