Office Otomasyonu'nu kullanarak Visual C++

Makale çevirileri Makale çevirileri
Makale numarası: 196776 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Bu makalede, otomasyon Visual C++ için Microsoft Office ile ilgili sık sorulan sorulara yanıtlar.

Daha fazla bilgi

İçindekiler

  1. Otomasyonu nedir?
  2. Daha fazla bilgi için uygun kaynakları nerede bulabilirim Otomasyonu için yeni olduğum?
  3. Farklı yollarla Otomasyonu kullanıyorum var mı?
  4. COM nedir?
  5. Nasıl ı çalışan bir Office uygulaması örneği için iliştirebilir?
  6. Nasıl ı isteğe bağlı parametreleri geçirmek?
  7. Nasıl ı Office uygulaması tarafından gösterilen olay catch?
  8. Otomasyon kodum çok yavaştır. Nasıl şeyler hızlandırabilirim?
  9. Bu çok büyük hata değerleri-2147352573 veya 0x80030002, ne anlama gelir?
  10. Bir tür kitaplığı nedir?
  11. Otomasyon kodum, Microsoft Excel 95 ancak başarısız olan Microsoft Excel 97 ile birlikte çalışmıştır. Neden?
  12. Neden programımı tamamlandıktan sonra ı otomatikleştirme uygulama bellekte kalmasını?
  13. Microsoft Office uygulama kullanıcısı olarak yapmak istediğim biliyorum ama nasıl bu Otomasyonu'nu kullanarak programsal yapabilirim?
  14. ı katıştırılmış bir Microsoft Office uygulaması otomatikleştirebilir mi?
  15. Bir Microsoft Office belgesini belge özelliklerinde yaptığım nasıl erişebilirim?

Soru ve Yanıtlar

  1. Otomasyonu nedir?

    Otomasyon (eski adı OLE Otomasyonu) varolan bir programın işlevsellikten yararlanmak ve onu kendi uygulamaları birleştirmek olanak sağlayan bir teknolojidir. Örneğin, Microsoft Word yazım ve dilbilgisi yetenekleri uygulamanıza Microsoft Word, kullanıcılarınıza görünür olmadan denetimi kullanabileceği. Tüm Microsoft Excel grafiğini, yazdırma ve veri çözümleme araçlarını da kullanabilirsiniz. Bu teknoloji büyük oranda basitleştirmek ve geliştirme hızı.
  2. Daha fazla bilgi için uygun kaynakları nerede bulabilirim Otomasyonu için yeni olduğum? David Kruglinski'nın "ınside Visual C++" ', Bölüm 24 (ISBN:1 - 57231 - 565 - 2) çok örnek yanı sıra, genel bir bakış sağlar. Ayrıca, Microsoft Bilgi Bankası bir iyi bilgi kaynağıdır. Bu makalede iyi bir başlangıç ve daha özel başvurular, Microsoft Bilgi Bankası'ndaki aşağıdaki makalede bulabilirsiniz:
    152023OLE Otomasyonu Study kaynakları bulma
    Örnekle öğrenme tercih ederseniz, lütfen Microsoft Knowledge Base'de aşağıdaki makaleye bakın:
    179706Nasıl YAPıLıR, Excel'in & oluştur/Format yeni bir çalışma kitabı otomatikleştirilir MFC kullan
  3. Farklı yollarla Otomasyonu kullanıyorum var mı?

    Otomasyon kullanabileceğiniz üç temel yolu vardır: MFC, alma ve C/C++:

    • MFC ile Visual C++ ClassWizard "sarmalayıcı sınıfları" Microsoft Office tür kitaplıklarından oluşturmak için kullanın. Bu sınıfların yanı sıra, diğer MFC sınıfları COleVariant, <a2>COleSafeArray</a2>, <a4>COleException, otomasyon görevlerini basitleştirme. Bu yöntem genellikle, başkalarının önerilir ve MFC çoğunu, Microsoft Knowledge Base örnekleri'ni kullanın.
    • alma, Visual C++ 5.0 ile birlikte kullanılabilir oldu yeni bir yönergeyi VC ++ belirtilen tür kitaplığından "Akıllı işaretçileri" oluşturur. Güçlü, ancak genellikle önerilmez, genellikle bir Microsoft Office uygulamaları ile kullanıldığında oluşan başvuru-CVE-2006-sayım sorunlar nedeniyle bu olur.
    • C/C++ Otomasyon kadar olduğundan daha zor, ancak yük ile MFC veya alma ile ilgili sorunları önlemek bazen gerekli. Temel olarak, bu tür Apı CoCreateInstance() olarak çalışmak ve ıdispatch ve ıunknown gibi COM arabirimleri.
    Bazı küçük farklılıklar Otomasyon gelen COM C++ sınıfı tasarlanmıştır çünkü düz C'YE karşılaştırıldığında C++ arasında olduğuna dikkat edin önemlidir. Daha fazla bilgi için lütfen C bir örnek için Microsoft Knowledge Base'de aşağıdaki makaleye bakın:
    181473Nasıl YAPıLıR: OLE Otomasyonu C bir uygulama tarafından kullanılır.
  4. COM nedir?

    Otomasyon, Bileşen Nesne Modeli (COM) temel alır. COM arabirimlerde Temel ve kendi içinde bütünlük oluşturan nesnelerine ayrılmış kodu için tasarlanmış bir standart yazılım mimaridir. Bunu, uygulamalar ayrı bir uzantı nesne yönelimli programlama (OOP) standardı, ancak geçerli düşünün. Her nesne arabirimleri kümesi sunar ve bu arabirimler aracılığıyla tüm iletişimler için veri aktarımını başlatma ve bildirimler gibi bir nesne olur.

    Ayrıca, COM ise bir işletim sistemiyle yüklenen dinamik bağlantı kitaplıkları (DLL) tarafından sağlanan hizmetleri. Otomasyon bu hizmetlerin çoğunu kullanır. Istemci uygulamanın sunucu uygulama arabirim üyesini işlevleri çağrılarını paketler ve sunucu uygulamasına kendi bağımsız değişken olarak olanlar geçirir "Marshalling" hizmeti bir örnektir. Sunucunun arabirimlerini, istemci, kendi işlem alanında çalışan bir .exe olduğunda, durum böyle değildir, istemcinin bellek alanında kullan?ma sunulan görüntülenmesini sağlar. Sıralanırken de dönüş değerlerini sunucunun yöntemleri geri işlem sınırları boyunca ve güvenle istemcinin arama sonucu içine alır. Temel çeşitli COM kitaplıkları tarafından sağlanan bir Otomasyon için pek çok hizmetin vardır. Bunlar hakkında bilgi kaynakları "İç OLE - ikinci baskı" Kraig Brockschmidt, ISBN 1-55615-843-2, "İç COM" Dale Rogerson - ISBN 1-57231-349-8 olarak ekleyin ve "Otomasyon Programmer 's Reference'nın," ISBN 1-57231-584-9.
  5. Nasıl ı çalışan bir Office uygulaması örneği için iliştirebilir?

    API GetActiveObject() kullanın. Otomasyon sunucuları kendilerini RegisterActiveObject() API ROT (çalışan nesne tablosu) kaydedin. Otomasyon istemcilerinin çalışan örnek kodu gibi alabilirsiniz:
          // 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();
    
    						
    Not: birden çok örneği varsa, eklemek istediğiniz Office uygulamasını çalıştıran, yalnızca ilk örneğine GetActiveObject() API kullanarak başlatıldı eklemek görebilecektir.

    Teorik olarak, her bir örnek ROT yineleme yapabilirsiniz, ancak kendisi için ad her zaman aynı (bunu yine de ayırt belirlenemedi) başka bir örneği zaten ROT içinde olduğundan, Office uygulamaları kendilerini kayıt yok. Yani, ilk dışında herhangi bir örneği eklenemiyor. Office uygulamaları da ROT belgeleri kaydetmek için ancak, başarıyla diğer örnekler için ekleme, bundan sonra uygulama nesnesini alma belirli bir belge için arama ROT yineleme olarak iliştirebilirsiniz. ROT dolaşmak ve belge adını bulmak için aşağıdaki Microsoft Bilgi Bankası makalesi kod bulunmaktadır:
    190985Nasıl YAPıLıR: Bir OCX ıdispatch Excel veya Word belgesi Al...
    Tek örnekli bir uygulama olduğundan, PowerPoint bunu gerekmez; yalnızca bir örneğini çalıştıran olabilir.
  6. Nasıl ı isteğe bağlı parametreleri geçirmek?

    Bazı yöntemler "isteğe bağlı" vardır. Visual Basic'te, casually bunları yöntemi çağrılırken atlayabilirsiniz. Ancak, Visual C++ ile çağrılırken VT_ERROR, .vt alanıdır özel bir VARIANT geçirilecek olan ve DISP_E_PARAMNOTFOUND .scode alanıdır. Diğer bir deyişle:
          // VARIANT used in place of optional-parameters.
          VARIANT varOpt;
          varOpt.vt = VT_ERROR;
          varOpt.scode = DISP_E_PARAMNOTFOUND;
    						
    bu gerçekten ne Visual Basic yaptığını, behind-the-scenes.
  7. Nasıl ı Office uygulaması tarafından gösterilen olay catch?

    Temel olarak, ("havuz") yakalamak istediğiniz olay arabirimini uygulayan ve danışma belgesinin bir bağlantı ("kaynak") uygulama. Aşağıdaki makalede Microsoft Word için adım adım yol gösteren örnekler verir:
    183599Nasıl YAPıLıR: VC ++ kullanarak Microsoft Word97 uygulama olayları tut
    Genel olarak, danışma bağlantısı kurmak için sunucunun IConnectionPointContainer alın ve olay arabirimi ııd FindConnectionPoint() arayın. Bu arabirim IConnectionPoint sağlar; sol tüm olay arabiriminiz örneği ile Advise() çağırmak için. Sunucu daha sonra bu olaylar oluştuğunda bu arabirim üzerinden geri çağırır.
  8. Otomasyon kodum çok yavaştır. Nasıl şeyler hızlandırabilirim?

    Yinelenen okuma ve veri yazma ile sık rastlanan nedenlerinden biri, otomasyon hızı sorun var. Excel Otomasyonu için bu normaldir istemcileri. Ancak, birçok kişi bu veriler genellikle yazılmış veya tümünü bir seferde SAFEARRAY kullanılarak okunan, farkında değildir. Daha fazla bilgi ve bilgilendirici bir örnek için aşağıdaki Microsoft Knowledge Base makalelerinde bakın:
    186120Nasıl YAPıLıR: MFC Excel otomatikleştirme ve bir dizi olan bir aralığı doldurmak için kullanılır.
    186122Nasıl YAPıLıR: Excel otomatikleştirme ve bir aralıktan bir dizi elde MFC kullanın.
    179706Nasıl YAPıLıR: Excel otomatikleştirme ve yeni bir çalışma kitabı oluştur/Format MFC kullanın.
    Ayrıca, Pano kullanarak bazı durumlarda performansı işaret etmek önemlidir. Örneğin, verilerinizi panoya kopyalayın sonra yapıştırmaya sunucu bildirmek için Otomasyon'ni kullanın. Veya Kopyala ve panoya sunucusuna bildirmek ve uygulamanıza yapıştırabilirsiniz tersi;.
  9. Bu çok büyük hata değerleri-2147352573 ya da 0x80030002 ne anlama gelir?

    Bu değerler HRESULTs bilinir ve winerror.h içinde tanımlanır. Sayı çok büyük olduklarından, bir hata sonucu olup olmadığını, ilk bit temsil eder. Bu sayı anlamlı açıklamalarını çevirmek için Visual C++ ile gelen ErrLook.Exe yardımcı programını kullanabilirsiniz.

    Programsal olarak hatalar için bir açıklama edinmek istiyorsanız, FormatMessage() API kullanabilirsiniz. Daha fazla bilgi ve örnekler için aşağıdaki Microsoft Knowledge Base makalelerinde FormatMessage() kullanımda bakın:
    186063BILGI: VB/VBA Otomasyon hatası çevriliyor.
    122957Örnek: Decode32 ve Decode16 OLE hata kodu çözücüsü araçları
    Not: Visual C++ 6.0 kullanan ve hata ayıklama izleme penceresinde, bu değer içeren bir de?i?ken sahip, append ", hr" (tırnak işaretleri) olmadan, Visual C++ ile için çevirmek için!
  10. Bir tür kitaplığı nedir?

    Bir tür kitaplığı, bir C/C++ üstbilgi dosyasına benzer. Bu arabirimler, yöntemler ve bir sunucu yayımlama özellikleri de içerir. Tür kitaplığı ile OLE/COM nesnesi, Visual C++ ile birlikte gelen Görüntüleyici (Oleview.exe) görüntüleyebilirsiniz. Microsoft Office 2000 95 ve 97 için tür kitaplığı dosya adlarını listesi aşağıdadır:
    
           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. Otomasyon kodum, Excel 95 ancak başarısız Excel 97 ile birlikte çalışmıştır. Neler?

    Nesne modeli Excel 95 için 97 sürümünden önemli bir değişiklik yaptınız. Excel 95 tüm yöntemleri ve özellikleri, tek bir ıdispatch uygulamasında uygulanır. Bu, genellikle, nesnenin X, Y nesnesinden yapısındaki yöntemlerini çağıran, yapısındaki. Bu iyi bir tasarımın değildi, Office 97'de, her nesne, kendi bulunmanız Idispatch ayrı uygulama. Bu hata, 0x80020003-2147352573, "üyesi bulunamadı." için bir yöntem veya özellik ayrı bir nesneden Y X nesnesinden isteyin, alma gösterir. Bu hatanın oluşmaması için <a0></a0>, gelen çağrıların kuran temel ıdispatch arabirimi semantically doğru olduğundan emin olun gerekir. Daha fazla bilgi için aşağıdaki Microsoft Knowledge Base makalelerinde bakın:
    172108Nasıl YAPıLıR: "bulunamadı üyesi", 0x80020003 sorun giderme hata
  2. Programım tamamlandığında BANA otomatikleştirme uygulama bellekte kalır. Neler?

    Büyük olasılıkla, bunun edinilmiş bir arabirim yayımlamayı unuttunuz ve bunu izlemek gerekli olmasıdır. Aşağıda bazı genel öneriler yer almaktadır ve Yapılabilecekler arar:

    • Alma kullanıyorsanız, tek bir ilişkili başvuru sayma hataların çalıştırması çok olasıdır. Genellikle bir kez hataların geçici çalışılan ancak genellikle, otomasyon yöntemlerden birini kullanın tercih. alma ve tür kitaplıklarının kullanımı oldukça karmaşık olduğundan, Office uygulamalarıyla, oldukça iyi işe yaramaz. Ayrıca, başvuru sayım gibi sorunları COM arabirimi düzeyini aramalarının bir lot olduğundan behind-the-scenes alma kullanırken izlemek zor.
    • Döndüren bir ıdispatch tüm yöntemler, Aç veya yeni, aramakta olduğunuz, denetleyin * (LPDISPATCH) ve dönüş değeri göz ardı ediliyor. Siz iseniz, sonra bu verilen arabirim durdurmadan ve artık gerekmediğinde serbest, kodunuzu değiştirmeniz gerekir.
    • Aç?klama giderek sorunu başladığı aşağı izlemek için dikkatli sorun kaybolur ve yeniden eklemek için kadar kodun bölümlerini yedekleyin.
    • Kullanıcı "uygulama işlemdeki," çalışan bazı uygulamaları kalır unutmayın. Otomatikleştirme, ancak bu durum ortaya çıkarsa, sonra uygulama büyük bir olasılıkla daha sonra çalışan kalır. Office uygulamaları, / bu davranışı değiştirmek için okuma, uygulama nesnesini bir "UserControl" özelliği vardır.
    • Ayrıca, bazı uygulamalar, yeterli kullanıcı arabirimi "eylem" oluştuysa çalışan kalmak karar verir. Sonra çıkmak için uygulama intending, kendi Quit() yöntemi uygulama nesnesi üzerinde çağırın. Word, çıkış çağrıldığında kapatma, başvuru sayısı ne olursa olsun olur. Bu, beklenen COM davranış değildir. Excel, düzgün yalnızca kendisini gizleme ancak yayımlanmış tüm bekleyen arabirimler kadar kalır. Genel olarak, tüm bekleyen başvuruların serbest bırakmak ve yalnızca çıkmak için bu uygulamayı düşünüyorsanız Quit() arama gerekir.
  3. Bir Office uygulaması kullanıcı olarak yapmak istediğim biliyorum ama nasıl bu program aracılığıyla Otomasyon yapabilirim?

    Hangi nesneleri, yöntemleri ve özellikleri kullanmanız gereken ne ilgilendiğiniz olur. Word, Excel ve PowerPoint, ne, bir kullanıcı olarak yapmak istediğinize bağlı nesne modellerini gidin öğrenmek için en iyi yolu, makro kaydediciyi kullanmaktır. Yalnızca Macro\ 'Yeni Makro Kaydet' ı seçin, Araçlar menüsünden, görevi de atmak ve Macro\ 'Kaydı Durdur.' seçin yürütme Işiniz sonra kayıt, Araçlar menüsünden Macro\Macros seçin, kaydettiğiniz makronun seçin ve Düzenle'yi tıklatın. Kaydettiğiniz bir görev gerçekleştirmek oluşturulan VBA kodu bu sürecektir. Kaydedilen makroyu unutmayın en olası kodda çoğu durumda, ancak kendi mu hızlı bir örnek için çok iyi olmayacaktır.
  4. BANA katıştırılmış olan bir Office uygulaması otomatikleştirebilir mi?

    Kesinlikle. Eli ıdispatch işaretçisi almaktır: Bu Visual C++ teknik Not 39'de (TN039) verilir. Adım adım yol gösteren bir örnek için aşağıdaki Microsoft Knowledge Base makalesine bakın:
    184663Nasıl YAPıLıR: Katıştırılmış ve bir Microsoft Excel Worksheet MFC ile otomatikleştirme
  5. Bir Office belgesini belge özelliklerinde yaptığım nasıl erişebilirim?

    Belge özellikleri Otomasyon üzerinden veya doğrudan IPropertyStorage aracılığıyla erişilebilir. Aşağıdaki Microsoft Knowledge Base makalelerinde, her yöntemi gösterilmektedir:
    179494Nasıl YAPıLıR: Otomasyon yerleşik belge özelliklerini almak için kullanın.
    186898Nasıl YAPıLıR: Bileşik belge özellikleri doğrudan ile VC ++ okunamıyor.

Özellikler

Makale numarası: 196776 - Last Review: 13 Mart 2008 Perşembe - Gözden geçirme: 7.0
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual C++ 2008 Express Edition
  • Microsoft Project 2000 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Visual C++ 4.0 Standard Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • 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
  • 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
Anahtar Kelimeler: 
kbmt kbsweptvs2008 kbautomation kbfaq KB196776 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:196776

Geri Bildirim Ver

 

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