2013-02-22 31 views
11

मुझे परीक्षण करना होगा कि क्या मैं अपने प्रोग्राम से एक्सेल ओएलई का उपयोग कर सकता हूं क्योंकि इसे एक्सेल के बिना पीसी पर लॉन्च किया जा सकता है। शुद्ध मान पर कोड नमूने एक्सेल स्थापित है, लेकिन अगर नहीं?यह जांचने का उचित तरीका क्या है कि एक्सेल ओएलई उपलब्ध है या नहीं?

XLApp := CreateOleObject('Excel.Application'); 
try 
    // Hide Excel 
    XLApp.Visible := False; 
    // Open the Workbook 
    XLApp.Workbooks.Open(aPath); 
    ...snip... 
finally 
    // Quit Excel 
    if not VarIsEmpty(XLApp) then 
    begin 
    XLApp.Quit; 
    XLAPP := Unassigned; 
    end; 
end; 

क्या यह एक्सेल स्थापित है या नहीं, यह सही कोड होगा?

//Try to create Excel OLE 
try 
    XLApp := CreateOleObject('Excel.Application'); 
except 
    ShowMessage('Error opening Excel'); 
    Exit; 
end; 
+5

मेरे लिए उचित लगता है। – Joe

उत्तर

15

आप चाहे एक्सेल उपलब्ध है की जाँच करने के Scalabium's tip के आधार पर एक कोड का उपयोग कर सकते हैं। या कुछ और की तरह:

uses ComObj, ActiveX; 

function IsObjectAvailable(const ClassName: string): Boolean; 
var 
    ClassID: TCLSID; 
begin 
    Result := Succeeded(CLSIDFromProgID(PWideChar(WideString(ClassName)), 
    ClassID)); 
end; 

तुम भी यदि एक्सेल निम्नलिखित कोड का उपयोग करके चल रहा है की जाँच कर सकते हैं:

function IsObjectActive(const ClassName: string): Boolean; 
var 
    ClassID: TCLSID; 
    Unknown: IUnknown; 
begin 
    Result := False; 
    if Succeeded(CLSIDFromProgID(PWideChar(WideString(ClassName)), ClassID)) then 
    Result := Succeeded(GetActiveObject(ClassID, nil, Unknown)); 
end; 

और फिर कुछ प्रक्रिया या घटना में:

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    if IsObjectAvailable('Excel.Application') then 
    ShowMessage('Excel is available'); 
    if IsObjectActive('Excel.Application') then 
    ShowMessage('Excel is running'); 
end; 
+7

+1 लेकिन मैं अपने आवेदन में 'CreateOleObject को छोड़कर' कोशिश करना जारी रखूंगा, क्योंकि मेरा मानना ​​है कि यह सुनिश्चित करने का एकमात्र विश्वसनीय तरीका है कि मैं वास्तव में * ऑब्जेक्ट इंस्टेंस * बना सकता हूं ('CoCreateInstance' के माध्यम से)। ऊपर की विधि को प्रारंभिक परीक्षण के रूप में इस्तेमाल किया जा सकता है ताकि यह जांच सके कि कक्षा सही तरीके से पंजीकृत है। – kobik

+0

@ कोबिक, मैं सहमत हूं। मेरे जवाब में मैंने माना कि ओपी को केवल यह जानने की आवश्यकता है कि एक्सेल को स्थापित करने के लिए कैसे जांचें, और 'CreateOleObject'' कोशिश करें, ऑब्जेक्ट इंस्टेंस निर्माण भाग के लिए भी वैसे भी उपयोग किया जाएगा। –

+1

@ गुइलम, 'CreateOleObject'' ओले चेक (CLSIDFromProgID ... '('ProgIDToClassID') भी वैसे भी कर रहा है। इसलिए यदि आप कोशिश करना चाहते हैं तो मुझे वास्तव में इसे फिर से करने में बिंदु दिखाई नहीं देता है, अगर आप कोशिश करना चाहते हैं CreateOleObject' किसी भी मामले में ... – kobik

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

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