2010-10-12 12 views
5

से ओएलई स्वचालन के दौरान वर्ड अदृश्य कैसे बनाएं हमारे आवेदन से हम ओएलई स्वचालन का उपयोग काफी जटिल वर्ड-दस्तावेज़ बनाने के लिए करते हैं। दस्तावेज़ बनाते समय मैं वर्ड अदृश्य बनाना चाहता हूं, क्योंकि बहुत सारे पेस्टिंग और सम्मिलन होते हैं जो काफी समय लेते हैं।डेल्फी

मैं निम्नलिखित कोड का उपयोग एक शब्द कनेक्शन स्थापित करने के:

function ConnectToWord : TWordAutomationResult; 
begin 
    WordApp := TWordApplication.Create(nil); 

    try 
    WordApp.Connect; 
    WordApp.Visible := false; 
    except on E: Exception do 
    begin 
     Result := waeErrorConnectingToWord; 
     exit; 
    end; 
    end; 
end;  

और मैं किसी मौजूदा दस्तावेज़ है, जो तब अपने आवेदन द्वारा संपादित किया जाता है खोलने के लिए निम्नलिखित कोड का उपयोग करें।

function TWordAUtomation.OpenDocument(aFileName: string) : WordDocument; 
var vFileName, 
    vConfirmConversions, 
    vReadOnly, 
    vAddToRecentFiles, 
    vPasswordDocument, 
    vPasswordTemplate, 
    vRevert, 
    vWritePasswordDocument, 
    vWritePasswordTemplate, 
    vFormat, 
    vEncoding, 
    vVisible, 
    vOpenConflictDocument, 
    vOpenAndRepair, 
    vWdDocumentDirection, 
    vNoEncodingDialog : OleVariant; 
begin 
    Result := nil; 
    if not FileExists(aFileName) then exit; 

    vFileName    := aFileName; 
    vConfirmConversions  := True; 
    vReadOnly    := False; 
    vAddToRecentFiles  := False; 
    vPasswordDocument  := EmptyParam; 
    vPasswordTemplate  := EmptyParam; 
    vRevert     := True; 
    vWritePasswordDocument := EmptyParam; 
    vWritePasswordTemplate := EmptyParam; 
    vFormat     := wdOpenFormatAuto; 
    vEncoding    := EmptyParam; 
    vVisible     := False; //Document should be invisible 
    vOpenConflictDocument := EmptyParam; 
    vOpenAndRepair   := EmptyParam; 
    vWdDocumentDirection  := EmptyParam; 
    vNoEncodingDialog  := EmptyParam; 

    Result := WordApp.Documents.Open(vFileName, vConfirmConversions, vReadOnly, vAddToRecentFiles, vPasswordDocument, vPasswordTemplate, vRevert, vWritePasswordDocument, vWritePasswordTemplate, vFormat, vEncoding, vVisible, vOpenAndRepair, vWdDocumentDirection, vNoEncodingDialog); 
end; 

यह मेरे कंप्यूटर पर काम करता है! (टीएम)

हमारे कुछ ग्राहकों के लिए शब्द संपादन प्रक्रिया के दौरान दिखाई देता है। इसके लिए क्या कारण हो सकते हैं? जहां तक ​​मैं उन ग्राहकों के लिए समस्या उत्पन्न कर सकता हूं जो कुछ प्रकार के रिमोट कंप्यूटिंग का उपयोग करते हैं, जैसे कि प्रबंधित क्लाइंट इत्यादि। क्या कुछ अतिरिक्त गुण हैं जो एप्लिकेशन दृश्यता से संबंधित हैं जो केवल दूरस्थ डेस्कटॉप कनेक्शन आदि के दौरान प्रभाव डालती हैं? मैं ऐसी चीजों के बारे में बहुत जानकार नहीं हूं :-(

उत्तर

4

मैं अपने सॉफ़्टवेयर के लिए वर्ड ऑटोमेशन को बनाए रख रहा हूं और सीट्रिक्स क्लाइंट्स में वर्ड विंडोज़ की पॉप-अप की रिपोर्ट भी थी। मुझे नहीं पता कि इसका क्या कारण है और कैसे इससे छुटकारा पाएं।

केवल एक ही तरीका है कि मैं वर्ड को फिर से दिखाना अनुकरण कर सकता हूं और यह आपके एप्लिकेशन को संसाधित करते समय वर्ड-दस्तावेज़ खोल रहा है। लेकिन मुझे नहीं लगता कि यह आपकी समस्याओं का कारण है।

पीएस: आप TWordAplication को कनेक्ट करते हैं। कनेक्ट करें और फिर आप गलत पर दृश्य सेट करें। पता है कि जब आप कनेक्ट को कॉल करते हैं और आपने कनेक्टकिंड नहीं बदला है, तो यह Word के चल रहे इंस्टेंस से कनेक्ट होगा। जब आपका क्लाइंट एक संपादन कर रहा है दस्तावेज़ इस दस्तावेज़ अचानक अचानक गायब हो जाएगा। शायद कनेक्टकिंड को न्यूइन्स्टेंस में सेट करना बेहतर है ताकि आप हमेशा एक नई winword.exe प्रक्रिया में काम कर सकें। मौजूदा winword.exe आपके क्लाइंट के लिए उपलब्ध रहेगा और वह आपके दस्तावेज़ पर काम करना जारी रख सकता है जबकि आपका एप्लिकेशन दूसरे पर प्रसंस्करण कर रहा है।

इस दृष्टिकोण बेशक कुछ कमियां भी हैं:

  • जब अपने ग्राहक के लिए एक नया शब्द-दस्तावेज़ को खोलता है, यह पद के अपने उदाहरण में खोला जाता है
  • आप Normal.dot पर त्रुटियों के द्वारा संशोधित किया जा रहा है प्राप्त कर सकते हैं
+0

इनपुट के लिए धन्यवाद। मैं कनेक्टकिंड को न्यूइंस्टेंस में बदलने की कोशिश करूंगा।मैं इस सवाल को खुला छोड़ दूंगा, इसलिए यदि आपको कभी भी दृश्यता-प्रश्न का उत्तर मिल जाए तो कृपया एक पंक्ति ड्रॉप करें :-) –

1

इसके बजाय TWordApplication का उपयोग करने का एक और आवेदन, CreateOLEObject का उपयोग करें:

var WordApp: Variant; 

procedure OpenWordFIle(const Filename: String); 
begin 
    WordApp := CreateOLEObject('Word.Application'); 
    WordApp.Visible := False; 
    WordApp.Documents.Open(Filename); 
    Application.ProcessMessages; 
end; 

शान से इसे बंद करने के लिए:

procedure CloseWordFile; 
begin 
    WordApp.ActiveDocument.Close($00000000); 
    WordApp.Quit; 
    WordApp := unassigned; 
end; 

आप इसे बंद नहीं करते हैं, वर्ड आवेदन अपने करीबी अपने डेल्फी आवेदन के बाद भी खुला रहेगा।

कुछ उपयोगी संसाधनों जहां आप अधिक विकल्प खोलने के लिए/बंद वर्ड फ़ाइलें पा सकते हैं:

http://msdn.microsoft.com/en-us/library/office/ff835182.aspx

How can I call documents.open and avoid the 'file in use' dialog?