2010-06-08 13 views
5

में प्रक्रिया या hwnd से अनुप्रयोग ऑब्जेक्ट C# में मैं Excel का उदाहरण प्राप्त करने का प्रयास कर रहा हूं। प्रक्रिया ऑब्जेक्ट से अनुप्रयोग ऑब्जेक्ट। ऐसा लगता है कि यह वास्तव में सरल होना चाहिए, फिर भी मैं इसे समझ नहीं सकता और एक उदाहरण नहीं पा रहा हूं। दोहराने के लिए, मेरे पास एक System.Diagnostics.Process ऑब्जेक्ट है जो मुझे पता है कि चल रहे एक्सेल इंस्टेंस को संदर्भित करता है। अब मुझे एक Microsoft.Office.Interop.Excel.Aplication ऑब्जेक्ट को पुनर्प्राप्त करने की आवश्यकता है जो प्रक्रिया को संदर्भित करता है ताकि मैं Excel अनुप्रयोग को C# से जोड़ सकूं।Excel प्राप्त करें। .NET

यदि यह किसी भी आसान बनाता है, तो मेरे पास सक्रिय एक्सेल विंडो से जुड़े एचडब्ल्यूएनडी आईडी और विंडो टेक्स्ट भी हैं।

धन्यवाद।

+0

प्रक्रिया आईडी का उपयोग कर एक्सेल इंस्टेंस या एक्सेल इंस्टेंस सीएलएसआईडी कैसे प्राप्त करें?] (Http://stackoverflow.com/questions/770173/how-to-get-excel-instance-or-excel-instance -clsid-use-the-process-id) – Helen

उत्तर

2

एक और एसओ पोस्ट पर उत्तर दिया:

How to get Excel instance or Excel instance CLSID using the Process ID?

+0

बहुत बहुत धन्यवाद। मैं इसे काम करने में सक्षम था। – Abiel

+0

मैं इस बारे में स्पष्ट नहीं हूं कि यह एक उत्तर कैसे है, क्योंकि अन्य थ्रेड आपको एक्सेल इंस्टेंस के 'इंटिप्रेट एचविंड' देता है, लेकिन यह अभी भी आपको 'माइक्रोसॉफ्ट.ऑफिस.इंटरोप.एक्ससेल.एप्लिकेशंस' ऑब्जेक्ट नहीं देता है .. । क्या मैं कुछ भूल रहा हूँ? – Antony

+0

कभी नहीं, कारण मैं उलझन में था क्योंकि उत्तर वास्तव में एक बाहरी लिंक से संबंधित है जो अब और काम नहीं करता है। वास्तव में, किसी और ने कोड @ http://pastebin.com/F7gkrAST पोस्ट किया – Antony

2

How to use Visual C# to automate a running instance of an Office program

using Excel = Microsoft.Office.Interop.Excel; 
:  

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; 
} 

में सुनिश्चित नहीं हैं सख्ती से प्रक्रिया वर्ग से आवेदन वस्तु पुनः प्राप्त करने की आवश्यकता है? उम्मीद है की यह मदद करेगा।

+2

क्षमा करें, मुझे यह उल्लेख करना चाहिए था कि मैंने पहले ही यह विकल्प माना है। दुर्भाग्यवश यह आम दृष्टिकोण मेरे लिए काम नहीं करता है क्योंकि मुझे एक्सेल के कितने उदाहरण चल रहे हैं, इस पर ध्यान दिए बिना मुझे अंतिम सक्रिय एक्सेल विंडो प्राप्त करने में सक्षम होना चाहिए। GetActiveObject हमेशा एक ही एक्सेल इंस्टेंस का संदर्भ देगा, भले ही कई उदाहरण चल रहे हों। – Abiel

1

मैं एक वर्ग है कि चल रहे सभी एक्सेल उदाहरणों के माध्यम से पुनरावृति कर सकते हैं बना लिया है, और यह भी hWnd, ProcessID, या एक प्रक्रिया वस्तु द्वारा आवेदन उदाहरणों देखने।

http://www.codeproject.com/Tips/1080611/Get-a-Collection-of-All-Running-Excel-Instances

जवाब मूल रूप से जो सबसे अच्छा एक साफ सार्वजनिक इंटरफ़ेस के पीछे छिपा हुआ छोड़ दिया हैं Win32 एपीआई को बदसूरत निर्वासन कॉल, का एक बहुत कुछ है।

यह Excel या Windows के सभी संस्करणों पर परीक्षण नहीं किया गया है।

संबंधित मुद्दे