Kantor otomatisasi menggunakan Visual C++

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 196776 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

Artikel ini menjawab pertanyaan umum mengenai otomatisasi untuk Microsoft Kantor dari Visual C++.

INFORMASI LEBIH LANJUT

Daftar isi

  1. Apakah otomatisasi?
  2. I 'm new to Otomasi, di mana saya dapat menemukan sumber daya yang baik untuk belajar lebih banyak?
  3. Apakah ada cara saya dapat menggunakan otomatisasi?
  4. Apakah COM?
  5. Bagaimana cara melampirkan untuk contoh menjalankan aplikasi Office?
  6. Bagaimana saya melewati parameter opsional?
  7. Bagaimana saya menangkap peristiwa-peristiwa yang terkena oleh aplikasi Office?
  8. Kode otomatisasi saya terlalu lambat. Bagaimana mempercepat sesuatu atas?
  9. Apa nilai-nilai besar kesalahan ini, seperti-2147352573 atau 0x80030002, artinya?
  10. Apakah perpustakaan jenis?
  11. Kode otomatisasi saya bekerja dengan Microsoft Excel 95, tapi gagal dengan Microsoft Excel 97. Mengapa?
  12. Mengapa Apakah aplikasi saya mengotomatisasi tinggal di memori setelah program saya sudah selesai?
  13. Aku tahu apa yang ingin saya lakukan sebagai pengguna aplikasi Microsoft Office, tetapi Bagaimana saya melakukan ini pemrograman menggunakan otomatisasi?
  14. Dapat saya mengotomatisasi aplikasi Microsoft Office yang tertanam?
  15. Bagaimana saya mengakses dokumen properti dalam sebuah dokumen Microsoft Office?

Pertanyaan dan jawaban

  1. Apakah otomatisasi?

    Otomatisasi (sebelumnya OLE Automation) adalah teknologi yang memungkinkan Anda untuk mengambil keuntungan dari program ada fungsi dan memasukkan ke dalam aplikasi Anda sendiri. Sebagai contoh, Anda dapat menggunakan Microsoft Kata ejaan dan tata bahasa yang memeriksa kemampuan ke dalam aplikasi tanpa Microsoft Word dapat dilihat oleh pengguna Anda. Anda bahkan dapat menggunakan semua Microsoft Excel charting, percetakan, dan data alat analisis. Ini teknologi dapat sangat mempermudah dan mempercepat pengembangan Anda.
  2. I 'm new to Otomasi, di mana saya dapat menemukan sumber daya yang baik untuk belajar lebih banyak? Bab 24 dari David Kruglinski "Di dalam Visual C++" (ISBN:1-57231 - 565 - 2) memberikan gambaran umum serta beberapa contoh besar. Juga, Microsoft Knowledge Base adalah sumber yang baik informasi. Ini artikel itu sendiri adalah awal yang baik, dan Anda dapat menemukan lebih spesifik referensi dalam artikel berikut pada Basis Pengetahuan Microsoft:
    152023 Menemukan sumber daya untuk studi OLE Automation
    Jika Anda memilih belajar dengan contoh, harap lihat artikel berikut di Basis Pengetahuan Microsoft:
    179706 HOWTO menggunakan MFC untuk mengotomatisasi Excel & membuat/Format buku kerja baru
  3. Apakah ada cara saya dapat menggunakan otomatisasi?

    Ada tiga cara dasar yang Anda dapat menggunakan otomatisasi: MFC, #import, dan C/C ++:

    • Dengan MFC, menggunakan Visual C++ ClassWizard untuk menghasilkan "pembungkus kelas"dari Microsoft Office ketik perpustakaan. Kelas-kelas ini, sebagai serta kelas-kelas MFC lain, seperti COleVariant, COleSafeArray, COleException, menyederhanakan tugas otomatisasi. Metode ini biasanya dianjurkan lebih dari yang lain, dan sebagian besar dari Microsoft Basis Pengetahuan contoh menggunakan MFC.
    • #Import, arahan baru yang menjadi tersedia dengan Visual C++ 5.0 menciptakan VC ++ "smart pointer" dari perpustakaan jenis tertentu. Itu sangat kuat, tapi sering tidak direkomendasikan karena dari referensi - masalah yang biasanya terjadi bila digunakan dengan Microsoft menghitung Aplikasi kantor.
    • C/C++ otomatisasi adalah banyak lebih sulit, tetapi kadang-kadang diperlukan untuk menghindari overhead dengan MFC, atau masalah dengan #import. Pada dasarnya, Anda bekerja dengan api tersebut sebagai CoCreateInstance(), dan COM interface seperti IDispatch dan IUnknown.
    Penting untuk dicatat bahwa ada beberapa sedikit perbedaan antara Otomatisasi dari C++ dibandingkan dengan polos C, karena COM dirancang di sekitar kelas C++. Untuk informasi lebih lanjut, silakan lihat artikel berikut di Basis Pengetahuan Microsoft misalnya C:
    181473 HOWTO: Menggunakan OLE Automation dari aplikasi c
  4. Apakah COM?

    Otomatisasi didasarkan pada Component Object Model (COM). COM adalah Arsitektur perangkat lunak standar didasarkan pada antarmuka, dan dirancang untuk kode dipisahkan menjadi benda-benda yang mandiri. Menganggapnya sebagai perpanjangan paradigma Object Oriented Programming (OOP), tetapi berlaku untuk Pisahkan aplikasi. Setiap objek memperlihatkan set interface, dan semua komunikasi ke objek, seperti inisialisasi, pemberitahuan, dan data transfer, terjadi melalui antarmuka ini.

    COM adalah juga set layanan yang disediakan oleh dynamic-link libraries (dll) diinstal dengan sistem operasi. Otomatisasi menggunakan banyak dari mereka layanan. Salah satu contoh adalah "Menyusun" layanan, paket yang aplikasi klien panggilan ke fungsi anggota server aplikasi 's antarmuka dan melewati mereka, dengan argumen-argumen mereka, untuk aplikasi server. Itu membuatnya tampak bahwa server antarmuka yang terpapar dalam ruang memori klien, yang tidak terjadi ketika klien adalah .exe berjalan di ruang proses sendiri. Menyusun juga mendapat nilai-nilai kembali dari server metode kembali di seluruh proses batas-batas dan aman ke tangan klien panggilan. Ada banyak layanan lain yang penting untuk otomatisasi yang disediakan oleh berbagai COM perpustakaan. Sumber-sumber informasi tentang orang-orang termasuk "Di dalam Ole - edisi kedua" oleh Kraig Brockschmidt, ISBN 1-55615-843-2, "Di dalam COM" oleh Dale Rogerson - ISBN 1-57231-349-8, dan "otomatisasi Programmer's referensi,"ISBN 1-57231-584-9.
  5. Bagaimana cara melampirkan untuk contoh menjalankan aplikasi Office?

    Menggunakan GetActiveObject() API. Server Otomatisasi mendaftarkan diri di ROT (menjalankan objek tabel), melalui RegisterActiveObject() API. Otomatisasi klien bisa mendapatkan pada contoh berjalan dengan kode seperti:
          // 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();
    
    						
    CATATAN: Jika ada beberapa contoh menjalankan aplikasi Office yang ingin Anda sertakan, Anda hanya akan dapat melampirkan untuk contoh pertama yang diluncurkan menggunakan GetActiveObject() API.

    Secara teoritis, Anda bisa iterate MEMBUSUK untuk setiap individu, tetapi aplikasi kantor tidak mendaftarkan diri jika contoh lain sudah dalam MEMBUSUK karena moniker sendiri selalu sama (itu tidak bisa dibedakan toh). Ini berarti bahwa Anda tidak dapat melampirkan untuk setiap contoh kecuali untuk yang pertama. Namun, karena aplikasi kantor juga mendaftar dokumen mereka dalam MEMBUSUK, Anda dapat berhasil melampirkan untuk contoh lain oleh iterasi MEMBUSUK mencari dokumen tertentu, melampirkan itu, kemudian mendapatkan objek aplikasi dari itu. Ada beberapa kode di artikel Basis Pengetahuan Microsoft berikut untuk iterasi MEMBUSUK dan mencari nama dokumen:
    190985 HOWTO: Mendapatkan IDispatch Excel atau Word dokumen dari OCX
    Anda tidak perlu melakukan hal ini untuk PowerPoint, karena itu adalah satu- contoh aplikasi; Anda hanya dapat memiliki satu contoh dari berjalan.
  6. Bagaimana saya melewati parameter opsional?

    Beberapa metode memiliki parameter "opsional". Dalam Visual Basic, Anda dapat santai menghilangkan mereka saat memanggil metode. Namun, ketika memanggil dengan Visual C++, Anda harus melewati VARIAN khusus yang .vt lapangan adalah VT_ERROR, dan .scode lapangan adalah DISP_E_PARAMNOTFOUND. Yaitu:
          // VARIANT used in place of optional-parameters.
          VARIANT varOpt;
          varOpt.vt = VT_ERROR;
          varOpt.scode = DISP_E_PARAMNOTFOUND;
    						
    Ini adalah benar-benar apa yang lakukan Visual Basic belakang layar.
  7. Bagaimana saya menangkap peristiwa-peristiwa yang terkena oleh aplikasi Office?

    Pada dasarnya Anda menerapkan antarmuka acara Anda ingin menangkap ( "tenggelam"), dan men-setup koneksi penasehat dengan aplikasi ( "sumber"). Artikel berikut memberikan langkah demi langkah contoh untuk Microsoft Word:
    183599 HOWTO: Menangkap peristiwa aplikasi Microsoft Word97 menggunakan VC ++
    Secara umum, untuk men-setup koneksi penasihat, Anda mendapatkan server IConnectionPointContainer dan memanggil FindConnectionPoint() dengan IID dari antarmuka acara. Ini memberi Anda antarmuka IConnectionPoint dan semua yang tersisa adalah untuk memanggil Advise() dengan contoh acara Anda antarmuka. Server akan kemudian panggilan kembali melalui ini antarmuka ketika peristiwa ini terjadi.
  8. Kode otomatisasi saya terlalu lambat. Bagaimana mempercepat sesuatu atas?

    Penyebab umum masalah kecepatan dengan otomatisasi adalah dengan berulang membaca dan menulis data. Ini khas untuk otomatisasi Excel klien. Namun, kebanyakan orang tidak menyadari bahwa data ini biasanya dapat tertulis atau membaca semua pada sekali menggunakan SAFEARRAY. Melihat Microsoft berikut Artikel Basis Pengetahuan untuk informasi lebih lanjut dan contoh-contoh informatif:
    186120 HOWTO: Menggunakan MFC untuk mengotomatisasi Excel dan mengisi berbagai dengan Array
    186122 HOWTO: Menggunakan MFC untuk mengotomatisasi Excel & mendapatkan sebuah Array dari berbagai
    179706 HOWTO: Menggunakan MFC untuk mengotomatisasi Excel dan membuat/Format buku kerja baru
    Juga, sangat penting untuk menunjukkan bahwa menggunakan dapat clipboard kadang-kadang meningkatkan kinerja. Sebagai contoh, Anda dapat menyalin data clipboard, kemudian menggunakan otomatisasi untuk memberitahu server untuk menyisipkan. Atau wakil- Sebaliknya; memberitahu server untuk Salin ke clipboard dan paste ke Anda aplikasi.
  9. Apa nilai-nilai besar kesalahan ini, seperti-2147352573, atau 0x80030002 berarti?

    Nilai-nilai ini dikenal sebagai HRESULTs dan yang ditetapkan dalam winerror.h. The angka sangat besar karena satu bit mewakili apakah atau tidak itu adalah hasil kesalahan. Anda dapat menggunakan utilitas ErrLook.Exe yang datang dengan Visual c ++ untuk menerjemahkan angka-angka ke dalam deskripsi bermakna.

    Jika Anda ingin mendapatkan pemrograman deskripsi kesalahan, Anda dapat menggunakan FormatMessage() API. Melihat Pengetahuan Microsoft berikut Dasar artikel untuk informasi lebih lanjut dan contoh-contoh penggunaan FormatMessage():
    186063 INFO: Menerjemahkan otomatisasi kesalahan untuk BB/VBA
    122957 CONTOH: Decode32 dan Decode16 alat kode kesalahan Decoder OLE
    CATATAN: Jika Anda menggunakan Visual C++ 6.0 dan memiliki sebuah variabel yang mengandung nilai ini dalam debug watch window, menambahkan ", hr" (tanpa tanda kutip) untuk memiliki Visual C++ menerjemahkan untuk Anda!
  10. Apakah perpustakaan jenis?

    Perpustakaan jenis ini mirip dengan file header C/C++. Ini berisi antarmuka, metode dan properti yang server penerbitan. Kamu bisa melihat perpustakaan jenis dengan OLE/COM objek Viewer (Oleview.exe) yang datang dengan Visual C++. Berikut adalah daftar perpustakaan jenis nama file untuk Microsoft Office 95, 97, dan 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. Kode otomatisasi saya bekerja dengan Excel 95, tapi gagal dengan Excel 97. Apa yang terjadi?

    Model objek untuk Excel membuat perubahan yang signifikan dari versi 95 97. Excel 95 dilaksanakan semua metode dan properti dalam satu pelaksanaan IDispatch. Ini berarti bahwa sering Anda bisa menelepon metode dimaksudkan untuk objek X, dari objek Y. Ini bukanlah desain yang baik, Jadi dalam Office 97, setiap benda mempunyai Idispatch sendiri terpisah pelaksanaan. Ini berarti bahwa jika Anda meminta sebuah metode atau properti dari objek x dari objek terpisah Y, Anda mendapatkan error 0x80020003, -2147352573, "Anggota tidak ditemukan." Untuk menghindari kesalahan ini, Anda perlu membuat yakin bahwa antarmuka IDispatch yang mendasari Anda membuat panggilan dari yang semantik benar. Melihat Pengetahuan Microsoft berikut Dasar artikel untuk informasi lebih lanjut:
    172108 HOWTO: Pemecahan masalah "Anggota tidak ditemukan", 0x80020003 kesalahan
  2. Aplikasi saya mengotomatisasi tetap dalam memori setelah program saya selesai. Apa yang terjadi?

    Kemungkinan besar, hal ini karena Anda lupa untuk melepaskan memperoleh antarmuka dan Anda akan perlu untuk melacak itu. Berikut adalah beberapa umum saran, dan hal-hal untuk mencari:

    • Jika Anda menggunakan #import, itu sangat mungkin Anda bisa berjalan ke salah satu bug menghitung referensi yang terkait dengannya. Sering kali bug dapat bekerja di sekitar, tapi biasanya pilihan untuk menggunakan salah satu metode otomatisasi lainnya. #Import tidak bekerja sangat baik dengan aplikasi Office, karena jenis perpustakaan dan penggunaan cukup kompleks. Juga, seperti masalah menghitung referensi keras untuk melacak karena banyak interface level COM panggilan belakang layar ketika menggunakan #import.
    • Periksa untuk melihat jika Anda menelepon setiap metode, seperti terbuka, atau baru, yang kembali IDispatch * (LPDISPATCH), dan mengabaikan kembali nilai. Jika Anda, maka Anda adalah meninggalkan antarmuka ini kembali dan akan perlu untuk mengubah kode Anda sehingga Anda melepaskan itu ketika tidak ada lagi diperlukan.
    • Secara bertahap komentar keluar bagian dari kode Anda sampai masalah menghilang, kemudian tambahkan kembali bijaksana untuk melacak di mana masalah dimulai.
    • Perhatikan bahwa beberapa aplikasi akan tetap berjalan jika pengguna memiliki "menyentuh" aplikasi. Jika hal ini terjadi ketika Anda sedang mengotomatisasi, kemudian aplikasi mungkin akan tetap berjalan setelah itu. The Aplikasi kantor memiliki "UserControl" properti pada aplikasi objek yang Anda dapat membaca/menulis untuk mengubah perilaku ini.
    • Juga, beberapa aplikasi akan memutuskan untuk tetap berjalan jika cukup antarmuka pengguna "tindakan" telah terjadi. Jika Anda berniat aplikasi untuk keluar, kemudian memanggil metode Quit() pada aplikasi objek. Word akan shutdown terlepas dari referensi yang menghitung ketika Berhenti disebut. Ini bukan perilaku COM diharapkan. Excel, namun, benar hanya akan menyembunyikan diri tapi tetap berjalan sampai semua luar biasa antarmuka yang dirilis. Secara umum, Anda harus melepaskan semua referensi yang luar biasa, dan hanya panggilan Quit() jika Anda bermaksud aplikasi untuk berhenti.
  3. Aku tahu apa yang ingin saya lakukan sebagai pengguna aplikasi kantor, tapi bagaimana saya melakukan ini pemrograman melalui otomatisasi?

    Apa yang Anda tertarik adalah apa objek, metode dan properti Anda perlu menggunakan. Cara terbaik untuk belajar bagaimana untuk menavigasi model objek Word, Excel, dan Powerpoint, berdasarkan apa yang ingin Anda lakukan sebagai pengguna, adalah untuk menggunakan makro perekam. Hanya memilih Macro\ 'Catatan baru makro' dari Tools menu, menjalankan tugas Anda tertarik, kemudian pilih Macro\ 'menghentikan rekaman. Setelah Anda selesai merekam, pilih Macro\Macros pada menu alat, pilih makro yang direkam, lalu klik Edit. Ini akan membawa Anda ke kode VBA yang akan mencapai tugas yang direkam. Perlu diingat makro rekaman tidak akan menjadi yang terbaik kode yang mungkin dalam kebanyakan kasus, tetapi tidak sangat baik untuk cepat contoh.
  4. Dapat saya otomatisasi aplikasi Office tertanam?

    Benar-benar. Trik mendapatkan penunjuk IDispatch: ini diberikan dalam Visual C++ teknis catatan 39 (TN039). Melihat Microsoft berikut Artikel Basis Pengetahuan misalnya langkah demi langkah:
    184663 HOWTO: Embed dan mengotomatisasi Microsoft Excel Worksheet dengan MFC
  5. Bagaimana saya mengakses dokumen properti di dokumen Office?

    Ini dapat diakses melalui otomatisasi, properti dokumen atau langsung melalui IPropertyStorage. Artikel Basis Pengetahuan Microsoft berikut menunjukkan masing-masing metode:
    179494 HOWTO: Menggunakan otomatisasi untuk mengambil Built-In dokumen properti
    186898 HOWTO: Membaca dokumen senyawa properti secara langsung dengan VC ++

Properti

ID Artikel: 196776 - Kajian Terakhir: 19 September 2011 - Revisi: 2.0
Berlaku bagi:
  • 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
  • Microsoft Access 2002 Standard Edition
  • Microsoft Excel 2002 Standard Edition
  • Microsoft PowerPoint 2002 Standard Edition
  • Microsoft Word 2002
  • Microsoft Outlook 2002 Standard Edition
Kata kunci: 
kbsweptvs2008 kbautomation kbmt KB196776 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:196776

Berikan Masukan

 

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