Şu anda çevrimdışısınız; İnternet'in yeniden bağlanması bekleniyor

Visual C++ kullanarak office Otomasyonu

ÖNEMLİ: Bu makale, Microsoft Makine Çevirisi Düzenleme yazılımı tarafından tercüme edilmiş olup, yüksek olasılıkla profesyonel bir çevirmen yerine CTF teknolojisi kullanılarak, Microsoft Topluluğu tarafından düzenlenmiştir. Microsoft, Bilgi Bankamız içindeki tüm makaleleri kendi dilinizde okuyabilmeniz için size hem profesyonel çevirmenler tarafından tercüme edilen hem de makine tarafından tercüme edildikten sonra Topluluk tarafından kontrol edilen makaleler sunar. Bununla birlikte, makine tarafından tercüme edilen, hatta Topluluk tarafından kontrol edilen bir makale bile her zaman mükemmel dil kalitesinde olmayabilir. Makalede dilinizi konuşan yabancı birisinin yapabileceği türden sözcük, söz dizimi veya dilbilgisi hataları bulunabilir. Microsoft, içeriğin hatalı tercümesinin veya müşterilerimiz tarafından kullanımının doğurabileceği olası yanlış anlamalar, hatalar veya zararlardan sorumlu değildir. Öte yandan Microsoft, Makine Çevirisi Düzenleme işlemini geliştirmek amacıyla Makine Çevirisi Düzenleme yazılımını ve araçlarını sık sık güncelleştirmektedir.

Makalenin İngilizcesi aşağıdaki gibidir: 196776
Özet
Bu makalede, otomasyon için MicrosoftOffice Visual C++ ile ilgili sık sorulan sorulara yanıtlar.
Daha fazla bilgi

İçindekiler tablosu

  1. Otomasyonu nedir?
  2. Daha fazla bilgi için iyi kaynakları nerede bulabilirim otomasyonu için yeni miyim?
  3. Otomasyon kullanmak farklı yolları var mıdır?
  4. COM nedir?
  5. Bir Office uygulaması çalışan örneği için nasıl eklemek?
  6. İsteğe bağlı parametreler nasıl geçti?
  7. Office uygulamaları tarafından oluşturulan olayları nasıl catch?
  8. Otomasyon kodumu çok yavaş olur. Şey nasıl hızlandırabilirim?
  9. -2147352573 veya 0x80030002, bu çok büyük hata değerleri ne anlama geliyor?
  10. Tür Kitaplığı nedir?
  11. Microsoft Excel 95, ancak Microsoft Excel 97 ile başarısız olan Otomasyon kodum çalışmıştır. Neden?
  12. Neden programımı bittikten sonra otomatikleştirme uygulama belleğini duruyor?
  13. Bir Microsoft Office uygulaması kullanıcı olarak yapmak istiyorum biliyorum, ama ne yapmam gerekli bu Otomasyon kullanarak programlı olarak?
  14. Katıştırılmış bir Microsoft Office uygulaması otomatik hale getirebilirsiniz?
  15. Bir Microsoft Office belgesini benim belge özelliklerini nasıl erişim sağlanır?

Sorular ve yanıtlar

  1. Otomasyonu nedir?

    Otomasyon (eski adı OLE Otomasyonu) varolan bir programın işlevsellikten yararlanmak ve kendi uygulamalarınızı birleştirme olanak sağlayan bir teknolojidir. Örneğin, Microsoft Word yazım ve dilbilgisi denetimi uygulamanıza Microsoft Word, kullanıcılara görünür olmadan yeteneklerini kullanabilir. Tüm Microsoft Excel grafik oluşturma, yazdırma ve veri çözümleme araçları bile kullanabilirsiniz. Bu teknoloji, büyük ölçüde basitleştirebilir ve geliştirme hızlandırmak.
  2. Daha fazla bilgi için iyi kaynakları nerede bulabilirim otomasyonu için yeni miyim? David Kruglinski'nın "içinde Visual C++'ın" baþlýklý Bölüm 24 (ISBN:1-57231-565 - 2) bazı harika örnekler 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:
    152023 OLE Otomasyon incelemek için kaynakları bulma
    Örnekle öğrenme tercih ederseniz, lütfen Microsoft Bilgi Bankası'ndaki aşağıdaki makaleye bakın:
    179706 Excel'i otomatikleştirmek & yeni bir çalışma kitabı oluşturun/biçim için MFC nasıl yapılır kullanın
  3. Otomasyon kullanmak farklı yolları var mıdır?

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

    • MFC ile "sarmalayıcı sınıfları" Microsoft Office tür kitaplıklarını oluşturmak için Visual C++ ClassWizard kullanın. Bu sınıflar, aynı zamanda diğer MFC sınıfları, COleVariant, COleSafeArray, COleException, Otomasyon görevlerini basitleştirir. Bu yöntem genellikle diğer tavsiye edilir ve Microsoft Bilgi Bankası örneklerin çoğu MFC kullanın.
    • #import, Visual C++ 5.0 ile birlikte kullanılabilir duruma gelen yeni bir yönerge VC ++ belirtilen tür kitaplığı'ndan "Akıllı işaretçiler" oluşturur. Genellikle Microsoft Office uygulamaları ile kullanıldığında başvuru - sayım sorunlardan çok güçlü, ancak önerilmez genellikle öyledir.
    • C/C++ Otomasyon olduğundan çok daha zor, ancak bazen #import ile ilgili sorunları veya MFC yükünü önlemek gerekli. Temel olarak, bu tür API CoCreateInstance() olarak çalışmak ve IDispatch ve IUnknown gibi COM arabirimleri.
    C++ COM C++ sınıfının tasarlandığı için düz C için karşılaştırıldığında Otomasyon arasında bazı küçük farkları olduğunu dikkate almak önemlidir. Daha fazla bilgi için lütfen C örneğin Microsoft Bilgi Bankası'ndaki aşağıdaki makaleye bakın:
    181473 Nasıl yapılır: C uygulamadan OLE otomasyonunu kullanın
  4. COM nedir?

    Otomasyon, Bileşen Nesne Modeli (COM) temel alır. COM arabirimlerine dayanarak, kendi içinde nesneler olarak ayrılmış kod sağlamak için tasarlanmış ve bir standart yazılım mimarisidir. Bunu uygulamaları ayırmak için bir uzantı nesne yönelimli programlama (OOP) paradigmasının ancak uygun düşünün. Her nesnesi arabirimleri kümesi sunar ve bu arabirimler veri aktarımı başlatma ve bildirimler gibi bir nesne için tüm iletişim olur.

    COM değil aynı zamanda işletim sistemiyle yüklenen dinamik bağlantı kitaplıkları (dll) tarafından sağlanan hizmetler kümesi. Otomasyon bu hizmetlerin çoğunu kullanır. Sunucu uygulama arabirimlerinin üye işlevleri istemci uygulamanın çağrıları paketleri ve olanlar, sunucu uygulaması için kendi bağımsız değişkenleri geçirir "Marshalling" hizmeti bir örnektir. Sunucu arabirimleri istemci kendi işlem alanında çalışan bir .exe olduğunda, durum böyle değildir, istemcinin bellek alanında sunulan görünmesini sağlar. Dizimi de dönüş değerlerini sunucunun yöntemleri geri işlem sınırları boyunca ve güvenli bir şekilde eller istemci çağrısının içine alır. Diğer pek çok hizmetin çeşitli COM kitaplığı tarafından sağlanan Otomasyon gerekli. Olanlar hakkında bilgi kaynakları "İçinde Ole – İkinci Sürüm" Kraig Brockschmidt, ISBN 1-55615-843-2, "İçinde COM" Dale Rogerson - ISBN 1-57231-349-8 ve "Otomasyon Programmer's Reference" ISBN 1-57231-584-9 içerir.
  5. Bir Office uygulaması çalışan örneği için nasıl eklemek?

    GetActiveObject() API kullanın. Otomasyon sunucuları RegisterActiveObject() API ile ROT (nesne tablosunda çalışan), kendilerini. Otomasyon istemcilerinin çalışan örnek kodu aşağıdaki 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: Varsa birden çok örneğini eklemek istediğiniz Office uygulamasını çalıştıran, size yalnızca GetActiveObject() API kullanılarak başlatılan ilk örneğe eklemek mümkün olacaktır.

    Teorik olarak, tek tek her örneği için ROT yineleme yapabilirsiniz, ancak kendisi için takma ad her zaman aynı (onu yine de ayırt edilebilir uygulanamadı) olduğundan başka bir örneği zaten içinde ROT ise Office apps kendilerini yok. Başka bir deyişle, ilk dışında herhangi bir örneği eklenemiyor. Office uygulamaları da içinde ROT belgeleri kaydetmek için ancak, başarıyla diğer örnekleri, buradan eleman almayı eklemeyi belirli bir belge için arayan ROT olduðunuzda ekleyebilirsiniz. ROT yineleme ve belge adını bulmak için aşağıdaki Microsoft Bilgi Bankası makalesi bazı kodu vardır:
    190985 Nasıl yapılır: Bir Excel veya Word belgesi IDispatch bir OCX alın.
    Bir tek örnekli uygulama olduğundan PowerPoint için bunu yapmak gerekmez; yalnızca bir örneğini çalıştıran sahip olabilir.
  6. İsteğe bağlı parametreler nasıl geçti?

    Bazı yöntemler "isteğe bağlı" parametrelere sahiptir. Visual Basic'te, kullanıcının kolayca bunları yöntemi çağrılırken atlayabilirsiniz. Bununla birlikte, Visual C++ ile çağırırken, VT_ERROR, .vt alanı olan bir özel değişken geçirmek zorunda ve .scode alanı DISP_E_PARAMNOTFOUND. Yani:
          // VARIANT used in place of optional-parameters.      VARIANT varOpt;      varOpt.vt = VT_ERROR;      varOpt.scode = DISP_E_PARAMNOTFOUND;						
    Visual Basic yaptıklarını budur gerçekten işini.
  7. Office uygulamaları tarafından oluşturulan olayları nasıl catch?

    Temel olarak, ("havuz") yakalamak istediğiniz olay arabirimini uygulayan ve uygulama ("kaynak") ile bir danışma bağlantısı kurma. Aşağıdaki makalenin Microsoft Word için adım adım örnekler verilmektedir:
    183599 Nasıl yapılır: VC ++ kullanarak Microsoft Word97 uygulama olayları yakalamak
    Genel olarak, danışma bağlantısı kurmak için sunucu IConnectionPointContainer alın ve FindConnectionPoint() olay arabirimin IID'si ile çağırın. Bu IConnectionPoint arabirimi sağlar ve kalan tek şey Advise() olay arabirimi örneği ile çağırmak için. Bu olaylar oluştuğunda sunucu daha sonra bu arabirimi üzerinden geri çağırır.
  8. Otomasyon kodumu çok yavaş olur. Şey nasıl hızlandırabilirim?

    Bir ortak Otomasyon hız sorunlarını yinelenen okuma ve veri yazma nedenidir. Excel Otomasyonu istemcileri için bu normaldir. Ancak, çoğu İnsan bu verileri genellikle yazılmış veya SAFEARRAY aynı anda kullanarak okuma olduğunu farkında değildir. Aşağıdaki Microsoft Bilgi Bankası makalelerinde bilgilendirici örnekler ve daha fazla bilgi için bkz:
    186120 Nasıl yapılır: MFC Excel'i otomatikleştirmek ve bir dizi olan bir aralığı doldurmak için kullanın.
    186122 Nasıl yapılır: MFC Excel'i otomatikleştirmek & bir aralıktan bir dizi elde etmek için kullanın.
    179706 Nasıl yapılır: MFC Excel'i otomatikleştirmek ve yeni bir çalışma kitabı oluşturun/Format için kullanın.
    Ayrıca, Pano kullanarak performansı artırır, işaret etmek önemlidir. Örneğin, verilerinizi Pano'ya kopyalayın sonra yapıştırmak söylemek için Otomasyon kullanın. Ya da tersi; Panoya Kopyala sunucuya bildirmek ve uygulamanıza yapıştırabilirsiniz.
  9. Bu çok büyük gibi hata değerleri,-2147352573 veya 0x80030002 ortalaması nedir?

    Bu değerler HRESULTs bilinen ve Winerror.h'de tanımlanır. Sayı çok büyük olduğu ilk bit hata sonucu olup olmadığını gösterir. Anlamlı açıklamalarla bu numaraları çevirmek için Visual C++ ile birlikte gelen ErrLook.Exe yardımcı programını kullanabilirsiniz.

    Programlı olarak hatalar için bir açıklama almak istiyorsanız, FormatMessage() API'sini kullanabilirsiniz. FormatMessage() kullanımı hakkında daha fazla bilgi ve örnekler için aşağıdaki Microsoft Bilgi Bankası makalelerine bakın:
    186063 BİLGİ: Otomasyon hataları VB/VBA çevriliyor.
    122957 Örnek: Decode32 ve Decode16 OLE hata kod çözücü araçları
    NOT: Append Visual C++ 6.0 kullanıyorsanız ve hata ayıklama izleme penceresinde bu değeri içeren bir değişken varsa, ", hr" (tırnak işaretleri olmadan) Visual C++ için çevirmek için ona!
  10. Tür Kitaplığı nedir?

    C/C++ üstbilgi dosyası için tür kitaplığı benzer. Bunu, arabirimleri, yöntemleri ve sunucu yayımlama özelliklerini içerir. Tür kitaplığı OLE/COM nesnesi Visual C++ ile birlikte gelen Görüntüleyici ile (Oleview.exe) görüntüleyebilirsiniz. Microsoft Office 95, 97 ve 2000 için tür kitaplığı dosya adları 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 oluyor?

    Excel nesne modeli sürümü için 95 97 önemli bir değişiklik yapılmış. Excel 95 tüm yöntemleri ve özellikleri tek bir IDispatch uygulaması içinde uygulanır. Bu genellikle sizin için X, Y nesneden nesne yöntemleri çağırabilirsiniz olduğunu geliyordu. Bu iyi bir tasarım değildi, Office 97'de, her nesne kendi sahiptir IDispatch uygulaması ayırın. Bu yöntemi veya özelliği ayrı bir nesne Y X nesnesinden isteyecekseniz, hata 0x80020003,-2147352573, "üye bulunamadı." almak anlamına gelir. Bu hatanın oluşmaması için gelen aramaların temel IDispatch anlam olarak doğru olduğunu emin olmak gerekir. Daha fazla bilgi için aşağıdaki Microsoft Bilgi Bankası makalelerine bakın:
    172108 Nasıl yapılır: "üyesi bulunamadı", 0x80020003 sorun giderme hata
  2. Programım sona erdikten sonra otomatikleştirme uygulama bellekte kalır. Neler oluyor?

    Büyük olasılıkla, alınan bir arabirim yayın unutmuş ve onu bulmaları gerekir çünkü budur. Burada bazı genel öneriler yer almaktadır ve şeylere arar:

    • #İmport kullanıyorsanız, büyük olasılıkla tek bir ilişkili başvuru sayımı hataların çalışan. Timesthe hataları genellikle etrafında çalıştı, ancak genellikle onu diğer Otomasyon yöntemlerden birini kullanmayı tercih. #import çalışmıyor çok wellwith Office uygulamaları, çünkü onun tür kitaplıkları ve useare oldukça karmaşık. Ayrıca, sorunları sayım böyle başvurusu olan bilginin izlemek çok fazla düzey arabirimi COM arebehind-sahneleri #import kullanırken çağırdığı için.
    • Bakın, IDispatch döndürmek herhangi bir yöntemin, açık veya yeni, arama, * (LPDISPATCH) ve returnvalue yoksayılıyor. Siz sonra terk bu döndürülen interfaceand nolonger gerektiğinde bırakacak kodunuzu değiştirmeniz gerekir.
    • Yavaş yavaş yorum kodunuzun bölümlerini kadar problemdisappears, daha sonra eklersiniz dikkatli theproblem başladığı aşağı izlemek için geri.
    • Bazı uygulamalar kullanıcı "uygulama işlem," çalışan kalır unutmayın. Otomatikleştirme ancak bu durumda, daha sonra uygulama büyük olasılıkla daha sonra çalışan kalır. TheOffice uygulamalar, / bu davranışı değiştirmek için okuma, Applicationobject "UserControl" özelliğine sahiptir.
    • Ayrıca, bazı uygulamalar, enoughuser arabirimi "eylem" oluştuğunda çalışan kalmak karar verir. Sonra çıkmak için yükleyebilen tasarladıysanız, Applicationobject üzerinde Quit() yöntemini çağırın. Word kapatma, başvuru sayısı whenQuit bağımsız olarak adlandırılır. Bu beklenen COM davranış değildir. Excel, düzgün sadece kendini gizlemek ancak tüm outstandinginterfaces serbest bırakılana kadar çalışan kalır. Genel olarak, alloutstanding başvurular serbest bırakmak ve çıkmak için yükleyebilen düşünüyorsanız, Quit() yalnızca çağrı gerekir.
  3. Bir Office uygulaması kullanıcı olarak yapmak istiyorum biliyorum, ama ne yapmam gerekli bu programla Otomasyon yoluyla?

    İlginizi çeken hangi nesneleri, yöntemleri ve özellikleri kullanmak ihtiyacınız var. Word, Excel ve Powerpoint, bir kullanıcı olarak yapmak istediğiniz şeye bağlı nesne modelleri gezinmek nasıl öğrenmek için en iyi yolu, makro kaydediciyi kullanmaktır. Yalnızca Araçlar menüsünden Macro\ 'Yeni Makro Kaydet' i için görev ilgileniyorsanız, sonra Macro\ 'Kaydı durdur.' ı seçin. İşiniz bittiğinde kaydı, Araçlar menüsünden Macro\Macros seçin, kaydettiğiniz makroyu seçin, sonra Düzenle'yi tıklatın. Kaydettiğiniz görevi oluşturulan VBA kodu bu sürecek. Kaydedilen makroyu unutmayın en iyi olası kod, çoğu zaman, ancak kendi mu hızlı bir örnek için çok iyi olmayacaktır.
  4. Katıştırılmış Office uygulaması otomatik hale getirebilirsiniz?

    Kesinlikle. Eli IDispatch işaretçisi alınıyor: Bu Visual C++ Teknik Not 39 in (TN039) verilir. Adım adım yol gösteren bir örnek için aşağıdaki Microsoft Bilgi Bankası makalesine bakın:
    184663 Nasıl yapılır: Gömme ve MFC ile Microsoft Excel çalışma sayfasını otomatikleştirmek
  5. Office belgesinde benim belge özelliklerini nasıl erişim sağlanır?

    Belge özellikleri, Otomasyon yoluyla ya da doğrudan IPropertyStorage aracılığıyla erişilebilir. Aşağıdaki Microsoft Bilgi Bankası makalelerinde, her yöntemi gösterilmektedir:
    179494 Nasıl yapılır: Otomasyon yerleşik belge özelliklerini almak için kullanın.
    186898 Nasıl yapılır: Okuma bileşik belge özellikleri bilgisayarlarla doğrudan VC ++
coledispatchdriver colesafearray colevariant _com_ptr_t _com_variant_t IPropertySetStorage

Uyarı: Bu makalenin çevirisi otomatik olarak yapılmıştır

Özellikler

Makale No: 196776 - Son İnceleme: 01/11/2015 13:49:00 - Düzeltme: 8.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 KbMttr
Geri bildirim