将光标设置为Word文档中的句子结尾

时间:2013-03-14 08:11:14

标签: c# ms-word

我在c#编码,根据需要将PDF文档转换为MS Word并格式化word文档。

任何人都可以建议我如何

  1. 将光标焦点设置为每个句子的结尾,并在每个句子的末尾点击输入。
  2. 仅选择并格式化每个段落的第一个字母。
  3. 以下是我正在使用的代码:

    for (int i = 0; i < selectedFiles; i++)
    {
    
        inFileName = openFile.SafeFileNames[i];
        outFileName = inFileName;
        pos = inFileName.LastIndexOf('.');
        if (pos > 0)
            outFileName = outFileName.Substring(0, pos);
        outFileName += ".doc";
    
        //outFileName = savePDFFile.FileName;
    
        //Convert(openFile.SafeFileNames[i], outFileName);
        Convert(cPath + inFileName, cPath + outFileName);
    
        Object oMissing = System.Reflection.Missing.Value;
        //OBJECTS OF FALSE AND TRUE
        Object oTrue = true;
        Object oFalse = false;
        //Create word document  
    
    
        Word.Application oWord = new Word.Application();
        Word.Document oWordDoc = new Word.Document();
        Object oTemplatePath = cPath + outFileName;
    
        oWordDoc = oWord.Documents.Add(ref oTemplatePath, ref oMissing, ref oMissing, ref oMissing);
    
        #region Replace Keyword
        this.FindAndReplace(oWord, "   ", " ");
        this.FindAndReplace(oWord, ". ", ".");
        this.FindAndReplace(oWord, " . ", ".");
        this.FindAndReplace(oWord, " .", ".");
        this.FindAndReplace(oWord, "-", " – ");
        this.FindAndReplace(oWord, ",", " ,");
        this.FindAndReplace(oWord, " , ", " ,");
        this.FindAndReplace(oWord, " -", "-");
        this.FindAndReplace(oWord, " - ", "-");
        this.FindAndReplace(oWord, "- ", "-");
        #endregion Replace Keyword
        Word.Range rng = null;
        if (oWordDoc.Sentences.Count > 0)
        {
            object startLocation = oWordDoc.Sentences[1].Start;
            object endLocation = oWordDoc.Sentences[1].End;
            // Supply a Start and End value for the Range. 
            rng = oWordDoc.Range(ref startLocation, ref endLocation);
            // Select the Range.
            rng.Select();
        }
        object missing = Missing.Value;
        object what = Word.WdGoToItem.wdGoToLine;
        object which = Word.WdGoToDirection.wdGoToLast;
        oWordDoc.GoTo(ref what, ref which, ref missing, ref missing);
        for (int j = 0; j < oWordDoc.Sentences.Count; j++)
        {
            //oWordDoc.Sentences[j].Text = oWordDoc.Sentences[j].Text.ToString() + "\n";
        }
        // add header
        foreach (Section section in oWordDoc.Sections)
        {
            Range headerRange = section.Headers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
            headerRange.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphLeft;
            headerRange.Font.Size = 12;
            headerRange.Font.Name = "Ariel";
    
            if (rng != null)
                headerRange.Text = rng.Text.Trim();
        }
        rng.Text = "";
        object findStr = "rr"; //sonething to find
        while (oWord.Selection.Find.Execute(ref findStr))  //found...
        {
            //change font and format of matched words
            oWord.Selection.Font.Name = "Tahoma"; //change font to Tahoma
            oWord.Selection.Font.Size = 48;
            oWord.ActiveWindow.Selection.ParagraphFormat.LineSpacingRule = Word.WdLineSpacing.wdLineSpaceSingle;
            //oWord.ActiveWindow.Selection.ParagraphFormat.SpaceAfter = 0.0F;
            oWord.Selection.Font.ColorIndex = Microsoft.Office.Interop.Word.WdColorIndex.wdRed;  //change color to red
        }
        oWordDoc.Content.Font.Name = "Franklin Gothic Book";
        oWordDoc.Content.Font.Size = 11.5F;
        oWordDoc.Content.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphJustify;
        //oWordDoc.Content.Start = 0;
        oWordDoc.ShowGrammaticalErrors = false;
        oWordDoc.ShowSpellingErrors = false;
        //oWordDoc.Content.Sections.First
        oWordDoc.SaveAs(cPath + outFileName);
        progressBar1.Value = (((i + 1) * 100) / selectedFiles);
    }
    

2 个答案:

答案 0 :(得分:1)

您可以使用InsertParagraphAfter功能在每个句子后添加新行。

类似的东西:

       int count = oWordDoc.Sentences.Count;
       for(int i=1; i<=count;i++)
       {
          object startLocation = oWordDoc.Sentences[i].Start;
          object endLocation = oWordDoc.Sentences[i].End;
          // Supply a Start and End value for the Range. 
          rng = oWordDoc.Range(ref startLocation, ref endLocation);
          // Select the Range.
          rng.Select();
          rng.InsertParagraphAfter();
       }

答案 1 :(得分:1)

使用Range.Move方法在句子的开头或结尾之间移动光标。

尝试下面的代码。

oRange.Move(WdUnits.wdSentence, -1);

如果有帮助,请将答案标记为肯定。

谢谢