2009-07-13 46 views
7

ile C# ile Excel uygulamasının örnek alın Belirli bir çalışma sayfasının excel aralıklarında bazı değerler yazmak zorunda C# basit bir uygulama var. Varsa, Excel uygulamasının bir örneğini oluşturuyorum, ancak varsa, etkin olarak ayarlamak ve kodumda kullanılacaksa bir örnek almak istiyorum.<a1> C</ a1>

Microsoft.Office.Interop.Excel app = 
    new Microsoft.Office.Interop.Excel.Application(); 
app.Visible = true; 

i

[DllImportAttribute("User32.dll")] 
private static extern int FindWindow(String ClassName, String WindowName); 

Nasıl tarafından excel uygulamasının örneğini alabilirsiniz Bu API kullanmak aktif excel pencerenin tanıtıcı almak için:

Ben yeni bir uygulama oluşturmak için bu kodu kullanın bir sap

int hWnd = FindWindow(null, "Microsoft Excel - MySheet.xlsx"); 
Microsoft.Office.Interop.Excel app = ....(hWnd) 

cevap

16

Excel ilk çalışan örneği almak için şu kodu kullanın:

oExcelApp = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application"); 

Örnek Sen Marshal.GetActiveObject kullanabilirsiniz

public Excel.Application StartExcel() 
{ 
    Excel.Application instance = null; 
    try 
    { 
     instance = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application"); 
    } 
    catch (System.Runtime.InteropServices.COMException ex) 
    { 
     instance = new Excel.ApplicationClass(); 
    } 

    return instance; 
} 
+0

Benim için 'instance = new Excel.ApplicationClass();' çalışmadı. 'Instance = new Excel.Application(); 'kullanmak zorundaydım. –

+2

@DavidMurdoch bu, [ortak çalışma türlerini gömmek için VS2010'daki değişiklik] sonucudur (http://blogs.msdn.com/b/mshneer/archive/2009/12/07/interop-type-xxx-cannot-be Gömülü kullanım-geçerli arayüz-instead.aspx). ApplicationClass() 'üzerinden 'Application()' seçeneğine geçmek bir geçici çözümdür, aynı sonucu elde edersiniz (bir arabirimi başlatıyor gibi görünsünüz bile!). – James

13

Çalışan birden çok Excel örneği olabilir.

GetActiveObject (...), Çalıştırma Nesnesi Tablosuna (ROT) bakar ve size açtığınız son Excel örneğini verir - mutlaka sahip olduğunuz pencere tutamaçına karşılık gelen değil.

AccessibleObjectFromWindow (..) adlı kullanıcıyı arıyorsunuz. Diğer cevapta bulunan Andrew Whitechapel post, bu işlevin nasıl kullanıldığını gösterir. Bir başka bağlantı - http://blogs.officezealot.com/whitechapel/archive/2005/04/10/4514.aspx.

İlgili konular