2011-02-10 12 views
9

पाठ के साथ एक बुकमार्क को प्रतिस्थापित करने के लिए अनुशंसित सी # नेट कोड बहुत सीधी आगे दिखाई देता है और मैंने कई वेबसाइटों पर नेट पर एक ही कोड देखा है (आपकी सितंबर 200 9 की पोस्ट से), हालांकि, मुझे त्रुटिसीमा को हटाया नहीं जा सकता है। Microsoft.Office.Interop.Word.Range.set_Text (स्ट्रिंग प्रोप)

सीमा को हटाया नहीं जा सकता है। Microsoft.Office.Interop.Word.Range.set_Text (स्ट्रिंग प्रोप)

पर (मैं VS 2010 उपयोग कर रहा हूँ विंडोज 7 और Word 2010 14.0 के साथ)।

मेरे कोड:

private void ReplaceBookmarkText(Microsoft.Office.Interop.Word.Document doc, string bookmarkName, string text) 
     { 
      try 
      { 
       if (doc.Bookmarks.Exists(bookmarkName)) 
       { 
        Object name = bookmarkName; 
        // throws error 'the range cannot be deleted' 
        doc.Bookmarks.get_Item(ref name).Range.Text = text; 
       } 
      } 

उत्तर

8

के बजाय सीमा में फेरबदल सीधे, जैसे कुछ प्रयास करें:

Bookmark bookmark = doc.Bookmarks.get_Item(ref name); 

//Select the text. 
bookmark.Select(); 

//Overwrite the selection. 
wordApp.Selection.TypeText(text); 

जैसे इसके बजाय दस्तावेज़ को बदलने के लिए अपने वर्ड एप्लिकेशन इंस्टेंस का उपयोग करें।

+0

यह काम करता है, आपको देर बाध्यकारी विकल्प नहीं होता है? – Schuere

1
if (doc.Bookmarks.Exists(name)) 
    { 
     Word.Bookmark bm = doc.Bookmarks[name]; 
     bm.Range.Text = text 
    } 

यह काम करता है लेकिन याद रखें, अगर आप किसी मौजूदा बुकमार्क के पूरे पाठ को इस तरह से बदलते हैं, तो बुकमार्क गायब हो जाता है। जब भी आप किसी मौजूदा बुकमार्क के पहले अक्षर को प्रतिस्थापित करते हैं (भले ही आप इसे पहले से वहां से बदल दें) बुकमार्क का उपभोग किया जाता है। जो मैंने पाया है (हालांकि मुझे यह दावा नहीं है कि यह माइक्रोसॉफ्ट अनुमोदित विधि है) इस तरह कुछ है:

if (doc.Bookmarks.Exists(name)) 
    { 
     Word.Bookmark bm = doc.Bookmarks[name]; 
     Word.Range range = bm.Range.Duplicate; 
     bm.Range.Text = text;     // Bookmark is deleted, range is collapsed 
     range.End = range.Start + text.Length; // Reset range bounds 
     doc.Bookmarks.Add(name, range);   // Replace bookmark 
    } 
+0

यह अभी भी त्रुटि को फेंक देगा "रेंज को हटाया नहीं जा सकता" COMException – Schuere

+0

यह किस परिस्थिति में COMException को फेंक देता है? फ़ील्ड सेटिंग्स बुकमार्क के साथ –

+0

टेक्स्ट फॉर्म फ़ील्ड। ==> पता चला कि Office इस फ़ील्ड को सेट करते समय सही बुकमार्क नहीं बनाता है। आपको अभी भी INSERT => बुकमार्क => "बुकमार्क का चयन करें" => जोड़ें करने की आवश्यकता है। एक सही बुकमार्क बनाने के लिए (Sigh ...) + संपादित करें: यह सही है क्योंकि मैं इस जवाब को ऊपर उठाऊंगा। – Schuere