2011-04-11 15 views
6

मैं यह पता लगाने की ग # इस तरह में interop.word का उपयोग कर एक ही पैरा में 2 विभिन्न स्वरूपों को सम्मिलित करने के लिए कैसे की कोशिश कर रहा है:एक ही पंक्ति में अलग स्वरूप Interop.word

हैलो ग्रह पृथ्वी यहाँ क्या हो रहा है मैं मान लिया जाये कि आप अपने दस्तावेज़ oDoc के रूप में परिभाषित किया है

उत्तर

5

क्या करना चाहते हैं, तो निम्न कोड आप इच्छित परिणाम प्राप्त करना चाहिए:

Word.Paragraph oPara = oDoc.Content.Paragraphs.Add(ref oMissing); 
oPara.Range.Text = "hello planet earth here's what I want to do"; 
object oStart = oPara.Range.Start + 13; 
object oEnd = oPara.Range.Start + 18; 

Word.Range rBold = oDoc.Range(ref oStart, ref oEnd); 
rBold.Bold = 1; 
+0

+1 क्योंकि ऐसा लगता है कि यह काम करेगा, लेकिन स्विच शैली करने का एक तरीका होना चाहिए, इसके बाद शैलियों को लागू करने के बजाय पात्रों को जोड़ने के बजाय। – Rup

+0

मेरे लिए यह +1 डेनिस –

4

मैं एक छोटे से डेनिस के जवाब संशोधित करने के लिए यह मेरे लिए काम करने के लिए पाने के लिए था ।

मैं इसे पूरी तरह से स्वचालित कर रहा हूं, इसलिए मुझे केवल चर के साथ काम करना है।

private void InsertMultiFormatParagraph(string text, int size, int spaceAfter = 10) { 
    var para = docWord.Content.Paragraphs.Add(ref objMissing); 

    para.Range.Text  = text; 
    // Explicitly set this to "not bold" 
    para.Range.Font.Bold = 0; 
    para.Range.Font.Size = size; 
    para.Format.SpaceAfter = spaceAfter; 

    var start = para.Range.Start; 
    var end = para.Range.Start + text.IndexOf(":"); 

    var rngBold = docWord.Range(ref objStart, ref objEnd); 
    rngBold.Bold = 1; 

    para.Range.InsertParagraphAfter(); 
} 

मुख्य अंतर यह है कि मुझे इस पोस्ट बनाना चाहते कि पैराग्राफ़ के बाद फॉन्ट बदल गया है डाला जाना चाहिए था। मेरा प्रारंभिक विचार SpaceAfter संपत्ति सेट करने के बाद इसे सम्मिलित करना था, लेकिन फिर objStart और objEnd मान "आउटऑफेंज" अपवादों को फेंक रहे थे। यह थोड़ा सा अंतर्ज्ञानी था, इसलिए मैं यह सुनिश्चित करना चाहता था कि हर कोई जानता है।

+0

"मैं अभी तक उनके उत्तर पर टिप्पणी नहीं कर सकता" आईएमओ अगर आप नया कोड या गैर-मामूली संशोधन का प्रस्ताव दे रहे हैं तो एक नया जवाब वैसे भी करने का सही तरीका है। मुझे संदेह है कि 'बोल्ड' मानों के लिए उपयोग करने के लिए सही/झूठे स्थिरांक हैं। – Rup

+0

मैं बोल्ड को छोड़कर एक ही चीज़ सोच रहा था (साथ ही इटालिक, अंडरलाइन, आदि) डेटाटाइप int की सभी गुण हैं। 1 "सत्य" होगा, 0 "झूठा" है। यह -1 तक डिफ़ॉल्ट है, इसलिए तीसरा "अनसेट" विकल्प है। कार्यालय इंटरऑप्स के साथ सबकुछ की तरह, यह इस तरह का प्रतिद्वंद्वी है कि आप इसे कैसे काम करने की उम्मीद करेंगे। सभी विरासत कोड नए आने वालों (जैसे खुद) के साथ काम करने में थोड़ा मुश्किल बनाते हैं। – krillgar

2

अनुच्छेद में किसी विशेष चयन को स्वरूपित करते समय निम्न कोड मेरे लिए सबसे अच्छा काम करता प्रतीत होता था। चयन करने के लिए "खोज" फ़ंक्शन में निर्मित वर्ड का उपयोग करना, फिर केवल चयनित टेक्स्ट को स्वरूपित करना। यह दृष्टिकोण केवल तभी काम करेगा यदि पाठ का चयन करने के लिए दस्तावेज़ में एक अद्वितीय स्ट्रिंग है। लेकिन ज्यादातर परिस्थितियों में मैंने भाग लिया है, ऐसा लगता है कि यह काम करता है।

 oWord.Selection.Find.Text = Variable_Containing_Text_to_Select; 
     oWord.Selection.Find.Execute(); 
     oWord.Selection.Font.Bold = 1; 

पाठ की स्ट्रिंग है कि आप एक पैरा में गिर रहे एक डेटाबेस, एक स्विच बयान है, या किसी अन्य विधि से आता है, तो मैं सिर्फ इतना है कि पाठ एक चर स्ट्रिंग में छोड़ और इसका इस्तेमाल खोज निष्पादित करने के लिए समारोह।

उम्मीद है कि यह किसी की मदद करेगा!

1

मुझे पता है कि यह पोस्ट पुराना है, लेकिन यह लगभग सभी मेरी खोजों में आया। नीचे दिया गया जवाब किसी के जैसा है, मेरे जैसे, एक वाक्य में एक से अधिक शब्द के लिए ऐसा करना चाहता है। इस मामले में, मैं चर कि स्ट्रिंग से युक्त और बोल्ड करने के लिए कि पाठ बदलने के एक स्ट्रिंग सरणी के माध्यम से लूप - modifing @ joshman1019

string[] makeBold = new string[4] {a, b, c, d}; 

foreach (string s in makeBold) 
{ 
    wApp.Selection.Find.Text = s; //changes with each iteration 
    wApp.Selection.Find.Execute(); 
    wApp.Selection.Font.Bold = 1; 
    wApp.Selection.Collapse(); //used to 'clear' the selection 
    wApp.Selection.Find.ClearFormatting(); 
} 

तो, प्रत्येक स्ट्रिंग चर का प्रतिनिधित्व करती बोल्ड हो जाएगा। तो यदि a = "hello world", तो हैलो वर्ल्ड शब्द दस्तावेज़ में बोल्ड किया गया है। उम्मीद है कि यह किसी को कुछ समय बचाता है।

0

मुझे पता है कि यह एक पुराना धागा है, लेकिन मैंने सोचा कि मैं यहां उन लोगों के लिए पोस्ट करूंगा जो Google के माध्यम से आते हैं (जैसे मैंने किया)। मुझे क्रिलगर के दृष्टिकोण के साथ समाधान के लिए सबसे अधिक रास्ता मिला, लेकिन मुझे परेशानी थी क्योंकि मेरे कुछ पाठ में न्यूलाइन हैं। तदनुसार, इस संशोधन ने मेरे लिए सबसे अच्छा काम किया:

private void WriteText(string text) 
    { 
     var para = doc.Content.Paragraphs.Add(); 
     var start = para.Range.Start; 
     var end = para.Range.Start + text.IndexOf(":"); 
     para.Range.Text = text; 
     para.Range.Font.Bold = 0; 
     para.Range.InsertParagraphAfter(); 

     if(text.Contains(":")){ 
      var rngBold = doc.Range(start, end); 
      rngBold.Bold = 1; 
     } 
    } 

महत्वपूर्ण अंतर यह है कि मैं पहले समारोह में शुरू और अंत की गणना करता हूं। मैं अपनी अंगुली को उस पर काफी नहीं डाल सकता, लेकिन मुझे लगता है कि यदि आपके नए पाठ में इसमें नई लाइनें हैं, तो प्रारंभ/अंत की बाद की गणना कुछ गड़बड़ कर देती है।

और स्पष्ट रूप से मेरी समाधान प्रारूप के साथ पाठ के लिए है:

लेबल: डाटा

जहां लेबल बोल्ड किए गए है।

0

पैरामीटर के रूप में Microsoft.Office.Interop.Word.WdCollapseDirection.wdCollapseEnd के साथ Range.Collapse के उपयोग पर विचार करें। जो अगले पाठ को पिछले पाठ (से अलग स्वरूपण करने की अनुमति देगा और अगला टेक्स्ट स्वरूपण पिछले एक के स्वरूपण को प्रभावित नहीं करेगा)।

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