2012-03-19 13 views
6

में एक बुकमार्क के बाद टेक्स्ट डालने के बाद मैं openxml का उपयोग करके एक शब्द दस्तावेज़ में बुकमार्क के बाद कुछ पाठ डालने का एक तरीका ढूंढ रहा हूं। अब तक, मैं का उपयोग कर बुकमार्क का पता लगाने के लिए निम्न में सक्षम हैं:ओपनएक्सएमएल

var bookmarks = mainPart.Document.Descendants<BookmarkStart>().ToList(); 
var bookMarkToWriteAfter = bookmarks.FirstOrDefault(bm => bm.Name == insertAfterBoomark.Name); 

शब्द दस्तावेज़ में यह बुकमार्क दस्तावेज़ में दो पंक्तियों की एक चयन है। मुझे दो पंक्ति चयन के बाद कुछ टेक्स्ट डालना होगा। मैंने निम्नलिखित का उपयोग करके टेक्स्ट सम्मिलित करने का प्रयास किया है:

var run = new Run(); 
run.Append(new Text("Hello World")); 
bookMarkToWriteAfter .Parent.InsertAfterSelf(run); 

mainPart.Document.Save(); 

हालांकि यह वांछित परिणाम नहीं देता है। क्या किसी को ओपनएक्सएमएल का उपयोग करते हुए एक शब्द दस्तावेज़ में बुकमार्क के बाद सही टेक्स्ट डालने का सही तरीका पता है?

उत्तर

7
का उपयोग कर

bookMarkToWriteAfter.Parent.InsertAfterSelf(run); 

आप सीधे एक्सएमएल जो हमेशा OpenXML साथ उचित नहीं है के साथ काम करने की कोशिश कर रहे

यह प्रयास करें ..

Body body = mainPart.Document.GetFirstChild<Body>(); 
    var paras = body.Elements<Paragraph>(); 

    //Iterate through the paragraphs to find the bookmarks inside 
    foreach (var para in paras) 
    { 
     var bookMarkStarts = para.Elements<BookmarkStart>(); 
     var bookMarkEnds = para.Elements<BookmarkEnd>(); 


     foreach (BookmarkStart bookMarkStart in bookMarkStarts) 
     { 
      if (bookMarkStart.Name == bookmarkName) 
      { 
       //Get the id of the bookmark start to find the bookmark end 
       var id = bookMarkStart.Id.Value; 
       var bookmarkEnd = bookMarkEnds.Where(i => i.Id.Value == id).First(); 

       var runElement = new Run(new Text("Hello World!!!")); 

       para.InsertAfter(runElement, bookmarkEnd); 

      } 
     } 
    } 
    mainPart.Document.Save(); 
+0

मैं एक आवश्यकता इस तरह है कि मैं सभी को खोजने की जरूरत बल्ले से बाहर पूरे दस्तावेज़ में बुकमार्क। ऐसा इसलिए है क्योंकि पाठ प्रविष्टि करने से पहले एक बार में उन सभी के लिए कुछ सामान्य किया जा रहा है। तो क्या सभी बुकमार्क एक साथ काम करने और अनुच्छेदों द्वारा विभाजित करने का कोई तरीका नहीं है? –

+1

आपको सभी बुकमार्क की एक सूची मिल सकती है और उनके साथ काम कर सकते हैं (जो आप उनके साथ करने का प्रयास कर रहे हैं उसके आधार पर), लेकिन ग्रंथों को सम्मिलित करने के लिए, अनुच्छेद तत्वों का उपयोग करके सम्मिलित करना बेहतर है। – Flowerking

1

आपको लगता है कि एक बुकमार्क शुरू होता है मान लेते हैं और एक अनुच्छेद में समाप्त होता है नहीं कर सकते। बुकमार्क विभिन्न तत्वों में शुरू और समाप्त हो सकते हैं और

bdo (§17.3.2.3); शरीर (§17.2.2); टिप्पणी (§17.13.4.2); customXml (§17.5.1.6); customXml (§17.5.1.4); customXml (§17.5.1.5); customXml (§17.5.1.3); डिग्री (§22.1.2.26); डेल (§17.13.5.14); डेन (§22.1.2.28); डीआईआर (§17.3.2.8); डॉकपार्ट बॉडी (§17.12.6); ई (§22.1.2.32); अंतराल (§17.11.2); fldSimple (§17.16.19); fName (§22.1.2.37); फुटनोट (§17.11.10); एफआरटी (§17.10.3); एचडीआर (§17.10.4); हाइपरलिंक (§17.16.22); इन्स (§17.13.5.18); lim (§22.1.2.52); moveFrom (§17.13.5.22); स्थानांतरित करें (§17.13.5.25); संख्या (§22.1.2.75); ओमाथ (§22.1.2.77); पी (§17.3.1.22); आरटी (§17.3.3.24); रूबीबेस (§17.3.3.27); sdtContent (§17.5.2.34); sdtContent (§17.5.2.33); sdtContent (§17.5.2.35); sdtContent (§17.5.2.36); स्मार्टटाग (§17.5.1.9); उप (§22.1.2.112); सुपर (§22.1.2.114); टीबीएल (§17.4.38); टीसी (§17.4.66); टीआर (§17.4.79)

https://msdn.microsoft.com/en-gb/library/documentformat.openxml.wordprocessing.bookmarkstart(v=office.15).aspx

यह आपको जरूरत पड़ने पर BookmarkEnd तत्व के लिए जाँच दस्तावेज़ में सभी BookmarkEnd तत्वों पर देखने की जरूरत है का मतलब है।

Body body = mainPart.Document.GetFirstChild<Body>(); 
var bookMarkStarts = body.Descendants<BookmarkStart>(); 
var bookMarkEnds = body.Descendants<BookmarkEnd>(); 

foreach (BookmarkStart bookMarkStart in bookMarkStarts) 
{ 
    if (bookMarkStart.Name == bookmarkName) 
    { 
     //Get the id of the bookmark start to find the bookmark end 
     var id = bookMarkStart.Id.Value; 
     var bookmarkEnd = bookMarkEnds.Where(i => i.Id.Value == id).First(); 

     var runElement = new Run(new Text("Hello World!!!")); 

     bookmarkEnd.Parent.InsertAfter(runElement, bookmarkEnd); 
    } 
} 
mainPart.Document.Save(); 

आपको लगता है कि एक रन माता-पिता के लिए जोड़ा जा सकता है की जाँच करें और एक अलग पूर्वज को जोड़ सकते हैं या एक नया अनुच्छेद बनाना चाह सकते हैं।

(मैं Flowerking के जवाब के लिए एक टिप्पणी के रूप में इस जोड़ लिया है करने के लिए पसंद आया होगा, लेकिन मैं इस जवाब में अपने कोड तो मैं बदलाव कर दिया है टिप्पणी नहीं कर सकता।)

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