Bir Office programının çalışan örneğini otomatikleştirmek için Visual C# kullanma

Özet

Bu adım adım makalede, bir Office programının çalışan örneğine Otomasyon Başvurusu alan bir Microsoft Visual C# 2005 veya Microsoft Visual C# .NET istemcisinin nasıl oluşturulacağı gösterilmektedir.

Bir Office Programının Çalışan Örneğini Otomatik hale Getiren Visual C# 2005 veya Visual C# .NET Uygulaması Oluşturma

Office'i otomatik hale getiren istemci programları, söz konusu Office programının yeni bir örneğini oluşturabilir veya zaten çalışmakta olan örneğe başvuru alabilir. Microsoft genellikle çalışan bir örneğe eklemek yerine yeni bir örnek oluşturmanızı önerir. Ancak bazı senaryolarda istemci programının zaten çalışan bir Office programı örneğini otomatikleştirmesi gerekir. Bu durumda Otomasyon istemcisi, Otomasyon sunucusunun Bileşen Nesne Modeli (COM) nesnesine başvuruyu Çalışan Nesne Tablosu'ndan (ROT) alır.

Otomasyon sunucusu kendisini Çalışan Nesne Tablosu'na kaydettiyse, bir .NET istemcisi aşağıdakileri çağırarak çalışan örneğe bir başvuru alabilir:

System.Runtime.InteropServices.Marshal.GetActiveObject

-veya-

System.Runtime.InteropServices.Marshal.BindToMoniker

Örnek Kod

  1. Microsoft Visual Studio 2005 veya Microsoft Visual Studio .NET'i başlatın. Dosya menüsünde Yeni'ye ve ardından Proje'ye tıklayın. Proje türleri'nin altında Visual C# Projeleri'ne tıklayın ve ardından Şablonlar'ın altında Windows Uygulaması'nı tıklatın. Form1 varsayılan olarak oluşturulur.

    Not Visual C# 2005'te , Visual C#Projeleri yerine Visual C# öğesine tıklayın.

  2. Microsoft Excel Nesne Kitaplığı'na ve Microsoft Word Nesne Kitaplığı'na başvuru ekleyin. Bunu yapmak için şu adımları uygulayın:

    1. Proje menüsünde Başvuru Ekle'ye tıklayın.

    2. COM sekmesindeMicrosoft Excel Nesne Kitaplığı'nı bulun ve Seç'e tıklayın.

      Not Visual C# 2005'te Seç'e tıklamanız gerekmez.

      Not Microsoft Office 2003, Birincil Birlikte Çalışma Derlemelerini (PIA) içerir. Microsoft Office XP PIA içermez, ancak indirilebilir.

    3. Microsoft Word Nesne Kitaplığı'nı bulun ve Seç'e tıklayın.

      Not Visual C# 2005'te Seç'e tıklamanız gerekmez.

    4. Başvuru Ekle iletişim kutusunda Tamam'a tıklayarak seçimlerinizi kabul edin.

  3. Görünüm menüsünde Araç Kutusu'na tıklayarak araç kutusunu görüntüleyin. Form1'e üç düğme ve bir metin kutusu ekleyin. Bu denetimlerin metnini aşağıdaki gibi yazın:

    Kimlik Metin
    düğme1 Çalışan Excel Örneğine Otomasyon Başvurusu Alma
    düğme2 Dosya Adı Kullanarak Excel'e Otomasyon Başvurusu Alma
    düğme3 Word Kabuğu ve Buna Otomasyon Başvurusu Alma
    textBox1 Kaydedilen xls dosyasının dosya adını girin
  4. Düğme denetimlerinin Click olay işleyicilerini aşağıdaki gibi ayarlayın:

    1. Düğme1'e çift tıklayın ve görünüm menüsünde Tasarımcı'ya tıklayın.
    2. Düğme2'ye çift tıklayın ve görünüm menüsünde Tasarımcı'ya tıklayın.
    3. Düğmeye çift tıklayın3.
  5. Aşağıdaki kodu, diğer using deyimlerinden sonra Form1.cs dosyasının en üstüne ekleyin:

    using Excel = Microsoft.Office.Interop.Excel;
    using Word = Microsoft.Office.Interop.Word;
    
  6. Olay işleyicilerine aşağıdaki kodu ekleyin:

    private void button1_Click(object sender, System.EventArgs e)
    {
    
    //Excel Application Object
    Excel.Application oExcelApp;
    
    this.Activate();
    
    //Get reference to Excel.Application from the ROT.
    oExcelApp =  (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
    
    //Display the name of the object.
    MessageBox.Show(oExcelApp.ActiveWorkbook.Name);
    
    //Release the reference.
    oExcelApp = null;
    }
    
    private void button2_Click(object sender, System.EventArgs e)
    {
    Excel.Workbook  xlwkbook;
    Excel.Worksheet xlsheet;
    
    //Get a reference to the Workbook object by using a file moniker.
    //The xls was saved earlier with this file name.
    xlwkbook = (Excel.Workbook)  System.Runtime.InteropServices.Marshal.BindToMoniker(textBox1.Text); 
    
    string sFile = textBox1.Text.Substring(textBox1.Text.LastIndexOf("\\")+1);
    xlwkbook.Application.Windows[sFile].Visible = true;
    xlwkbook.Application.Visible = true;
    xlsheet = (Excel.Worksheet) xlwkbook.ActiveSheet;
    xlsheet.Visible = Excel.XlSheetVisibility.xlSheetVisible;
    xlsheet.Cells[1,1] = 100;
    
    //Release the reference.
    xlwkbook = null;
    xlsheet = null;
    }
    
    private void button3_Click(object sender, System.EventArgs e)
    {
    Word.Application wdapp;
    
    //Shell Word
    System.Diagnostics.Process.Start("<Path to WINWORD.EXE>");
    
    this.Activate();
    
    //Word and other Office applications register themselves in 
    //ROT when their top-level window loses focus. Having a MessageBox 
    //forces Word to lose focus and then register itself in the ROT.
    
    MessageBox.Show("Launched Word");
    
    //Get the reference to Word.Application from the ROT.
    wdapp = (Word.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application");
    
    //Display the name.
    MessageBox.Show(wdapp.Name);
    
    //Release the reference.
    wdapp = null;
    }
    
    

    Not button3_click() içinde , Winword.exeYolu'nu doğru Winword.exe yoluyla değiştirin. Microsoft Word için varsayılan konum C:\Program Files\Microsoft Office\Office\Winword.exe'dir.

  7. Derleme menüsünde Çözümü Derle'yi seçerek uygulamayı derleyin.

Uygulamayı Test Edin

  1. Uygulamanızı derlemek ve çalıştırmak için F5 tuşuna basın.
  2. Tüm çalışan Excel örneklerini kapatın.
  3. Excel'i yeni bir çalışma kitabıyla başlatın.
  4. Çalışan Excel Örneğine Otomasyon Başvurusu Al düğmesine tıklayın.
  5. Uygulama, mevcut Excel örneğine Otomasyon başvurusunu alır. Otomasyon başvurusu, button1_Click için oExcelApp yerel değişkeninde depolanır. Bir ileti kutusu etkin çalışma kitabının adını görüntüler.
  6. Çalışma kitabını yerel diskinize kaydedin. Çalışma kitabını Excel'de açık bırakın.
  7. textBox1'de önceki adımda kaydettiğiniz çalışma kitabının tam yolunu ve dosya adını yazın.
  8. Dosya Adı kullanarak Excel'e Otomasyon Başvurusu Al düğmesine tıklayın.
  9. Uygulama, Çalışan Excel örneğine otomasyon başvurusu alır. Otomasyon Başvurusu, button2_Click için xlwkbook yerel değişkeninde depolanır. Etkin sayfanın ilk satırına ve ilk sütununa 100 değeri girilir.
  10. Çalışma kitabındaki değişiklikleri kaydetmeden Excel'den çıkın.
  11. Dosya Adı kullanarak Excel'e Otomasyon Başvurusu Al düğmesine tıklayın.
  12. Yeni bir Excel örneği oluşturulur ve daha önce kaydedilmiş çalışma kitabı açılır. Uygulama, excel'in bu örneğine otomasyon başvurusu alır. Otomasyon Başvurusu, button2_Click için xlwkbook yerel değişkeninde depolanır. Etkin sayfanın ilk satırına ve ilk sütununa 100 değeri girilir.
  13. Excel'i kapatın.
  14. Kabuk Sözcüğü'ne tıklayın ve Otomasyon Başvurusu Al düğmesine tıklayın.
  15. Word, komut isteminden başlatmış gibi başlatılır ve Başlatılan Word ileti kutusu görüntülenir. İleti kutusunun görüntülenmesi, WM_SETFOCUS bir iletinin Word program penceresine gönderilmesini zorlar. Bu, Word'in kendisini Çalışan Nesne Tablosu'na (ROT) kaydetmesini sağlar.
  16. İleti kutusunu kapatın. Program, Word'ün yeni başlatılan örneğine otomasyon başvurusu alır. Otomasyon başvurusu, button3_Click için yerel wdapp değişkeninde depolanır. Word.Application nesnesinin adını gösteren bir ileti kutusu görüntülenir.

Ek Notlar

COM sunucuları, tek bir bilgisayarda aynı anda çalışabilen sunucu örneklerinin sayısına bağlı olarak Çok Kullanımlı (Tek Örnek) veya Tek Kullanım (Birden Çok Örnek) olarak sınıflandırılabilir.

Yeni bir COM nesnesi isteği Çok Kullanımlı (Tek Örnekli) BIR COM sunucusuna geldiğinde, sunucu bu nesneyi oluşturmak için .exe dosyasının yalnızca bir örneğini kullanır. Kaç istemci yeni bir COM nesnesi istediğinden bağımsız olarak, işlem .exe tek bir sunucu olacaktır. Tek Kullanımlı (Birden Çok Örnek) sunucusunda, yeni bir COM nesnesine yönelik her istek sunucu .exe dosyasının ayrı bir örneğini başlatır. Bu nedenle, sunucunun birden fazla örneği aynı bilgisayarda çalıştırılabilir.

Birden çok Word (Winword.exe), Excel (Excel.exe) ve Microsoft Access (MSAccess.exe) örneği aynı anda çalıştırılabilir. Bu nedenle, bu sunucular Tek Kullanımlı (Birden Çok Örnek) sunucu olarak tanımlanır. Herhangi bir anda yalnızca bir PowerPoint (Powerpnt.exe) örneği çalıştırılabilir. Bu nedenle, PowerPoint bir Multiuse (Tek Örnek) sunucusudur.

COM sunucusunun Tek Kullanımlı (Birden Çok Örnek) veya Çok Kullanımlı (Tek Örnek) olup olmadığı, bu sunucuya başvuru almak için GetActiveObject kullanma kararınızı etkileyebilir. Word, Excel veya Microsoft Access'in birden fazla örneği çalıştırılabildiği için, belirli bir sunucuda GetActiveObject beklemediğiniz bir örnek döndürebilir. ROT'ye ilk kaydedilen örnek genellikle GetActiveObject tarafından döndürülen örnektir. Word, Excel veya Microsoft Access'in çalışan belirli bir örneğine Otomasyon Başvurusu almak istiyorsanız, bu örnekte açılan dosyanın adıyla BindToMoniker kullanın. Otomasyon başvurusu aynı çalışan örneğe işaret ettiğinden, PowerPoint gibi çok kullanıcılı (Tek Örnekli) bir sunucu için bu önemli değildir.

COM sunucularının başlangıçtan sonra Kendilerini Nesne Tablosunu Çalıştırma'ya kaydetmeleri beklenir. Office programları, odaklanmayı kaybettiklerinde kendilerini kaydeder. Program odağı kaybetmeden önce çalışan bir örneğe eklemeye çalışırsa bir hata iletisi alabilirsiniz.

Başvurular

GetActiveObject kullanırken Office programlarının farklı davranışları hakkında ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasına tıklayın:

288902 BİlGİ: Office Otomasyon Sunucularının GetObject ve CreateObject Davranışı Daha fazla bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitesine bakın:

Visual Studio ile Microsoft Office Geliştirme