2012-10-21 12 views
6

मैं सी # में एक प्रोग्राम पर काम कर रहा हूं जो एक .doc फ़ाइल बनाने के लिए माइक्रोसॉफ्ट वर्ड 14.0 ऑब्जेक्ट लाइब्रेरी का उपयोग करता है, इसमें पैराग्राफ जोड़ता है और इसे बचाता है। एक बटन के साथ एक छोटा सा रूप है जो क्रियाओं को वर्णित करता है (नीचे दिए गए कोड को देखें)। इस भाग में कोई समस्या नहीं है।शब्द स्वचालन का उपयोग करते हुए पैराग्राफ में सबस्क्रिप्ट वर्ण कैसे जोड़ें?

समस्या:

बनाया शब्द फ़ाइल में वर्तमान पाठ होगा निम्नलिखित:

कुछ पाठ beff = 3.0

मेरा लक्ष्य क्या है, एक पैरा है, जो वर्ण के अंदर सबस्क्रिप्ट है पैदा कर रही है की जरूरत है । (पत्र उपरोक्त अनुच्छेद में "eff" subscripted जानी चाहिए):

enter image description here

फाई नल दस्तावेज़ में उपरोक्त की तरह लगभग 100 पंक्तियां होंगी, जिसमें अलग-अलग वर्ण हैं।

मैं लाइन के साथ पूरे पैरा सबस्क्रिप्ट करने के लिए एक रास्ता मिल गया,

paragraph1.Range.Font.Subscript = 1; 

लेकिन अलग पात्रों पर इसे लागू करने के लिए कोई रास्ता मिल गया।

मुझे यह भी पता है कि यूनिकोड में सब्सक्राइब अक्षरों और संख्याएं हैं जिनका उपयोग मैं कर सकता था, लेकिन दुर्भाग्यवश, यूनिकोड में सबस्क्रिप्ट प्रारूप में पूर्ण वर्णमाला नहीं है, इसलिए यह कोई विकल्प नहीं है।

प्रश्न: क्या मेरे पास लक्ष्य को पूरा करने का कोई तरीका है और ताजा बनाए गए वर्ड दस्तावेज़ में अनुच्छेद के अंदर सबस्क्राइज़ में "eff" जैसे कुछ डालें?

नमूना कोड:

private void btnReport_Click(object sender, EventArgs e) 
    { 

     Word._Application oWord; 
     Word._Document oDoc; 
     oWord = new Word.Application(); 
     oDoc = oWord.Documents.Add(); 


     var paragraph1 = oDoc.Content.Paragraphs.Add(); 
     paragraph1.Range.Text = "Some text beff = 3.0"; 

     SaveFileDialog saveFileDialog1 = new SaveFileDialog(); 
     saveFileDialog1.Filter = "Word document|*.doc"; 
     saveFileDialog1.Title = "Save the Word Document"; 
     if (DialogResult.OK == saveFileDialog1.ShowDialog()) 
     { 
      string docName = saveFileDialog1.FileName; 
      if (docName.Length > 0) 
      { 
       object oDocName = (object)docName; 
       oDoc.SaveAs(ref oDocName); 
      } 
     } 
     oWord.Quit(); 
    } 

उत्तर

4

एक वर्ड दस्तावेज़ बनाएँ और subscipt/सुपरस्क्रिप्ट के साथ पाठ जोड़ने और .docx अनज़िप यह XML सामग्री दी गई है तो आप देखेंगे कि सबस्क्रिप्ट/सुपरस्क्रिप्ट युक्त पाठ एक अलग रन तत्व में रखा गया है जांच करने के लिए।

एक तरह से इस लक्ष्य को हासिल करने के लिए OpenXML SDK है बार जब आप डाउनलोड और एसडीके आप निम्नलिखित कोड का उपयोग कर सकते स्थापित किया है:

using System; 
using DocumentFormat.OpenXml; 
using DocumentFormat.OpenXml.Packaging; 
using DocumentFormat.OpenXml.Wordprocessing; 

namespace OpenXML 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      using (var doc = WordprocessingDocument.Create("C:\\Subscript.docx", WordprocessingDocumentType.Document)) 
      { 
       MainDocumentPart mainPart = doc.AddMainDocumentPart(); 

       mainPart.Document = new Document(); 
       Body body = mainPart.Document.AppendChild(new Body()); 
       Paragraph p = body.AppendChild(new Paragraph()); 

       p.AppendChild(AddRun(false, "Some text b ")); 
       p.AppendChild(AddRun(true, "eff")); 
       p.AppendChild(AddRun(false, "= 3.0")); 
      } 

      Console.WriteLine("Done..."); 
      Console.ReadLine(); 
     } 

     public static Run AddRun(bool isSubscript, string text) 
     { 
      Run run = new Run(); 
      if (isSubscript) 
      { 
       var props = new RunProperties(); 
       var fontSize = new FontSizeComplexScript() { Val = "20" }; 
       var vAlignment = new VerticalTextAlignment() { Val = VerticalPositionValues.Subscript }; 

       props.Append(fontSize); 
       props.Append(vAlignment); 
       run.Append(props); 
      } 
      run.Append(new Text(text)); 
      return run; 
     } 
    } 
} 

संपादित करें:

और यहाँ एक इंटरॉप समाधान है:

using WordNS = Microsoft.Office.Interop.Word; 

    WordNS.Document doc = _application.ActiveDocument; 
    WordNS.Paragraph p = doc.Paragraphs.Add(); 
    p.Range.Text = "Some text beff = 3.0"; 

    int start = p.Range.Text.IndexOf("eff"); 
    int end = p.Range.Text.IndexOf("="); 

    WordNS.Range range = doc.Range(start, end); 
    range.Select(); 

    WordNS.Selection currentSelection = _application.Selection; 
    currentSelection.Font.Subscript = 1; 

    doc.SaveAs2("C:\\SubscriptInterop.docx"); 
2

वर्ड में एक शब्द मैक्रो जो प्रक्रिया आप चाहते हैं simulates पैदा करते हैं। जब किया जाता है तो वीबीए कोड बनाता है। वह कोड आपको इंटरपॉप्स के काम पर क्या/कैसे देगा जिसे कॉल करने की आवश्यकता है।

3

आप उस काम को पाने के लिए सीमा की शुरुआत और अंत बिंदु के साथ खेल सकते हैं, और यहां तक ​​कि पाते हैं ऑफसेट।

Range range = paragraph1.Range; 
range.Text = "Some text beff = 3.0"; 
if (range.Text.Contains("eff =")) 
{ 
    range.Start = range.Start + range.Text.IndexOf("eff ="); 
    range.End = range.Start + 3; 
    range.Font.Subscript = 1; 
} 

उम्मीद है कि यह मदद करता है।

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