最近在做用C#操作WORD,自动生成文档, 已经实现了,但是要写一个XML文件来配置WORD的格式,XML文件写好,我是一个段落一个MARK那样插的内容,发现前面的属性会覆盖后面的属性。不知道怎么回事,贴上自己的代码,求高手回答,悬赏100分。
         object path;//文件路径变量
         object oRng;
         object oEndOfDoc = "\\endofdoc";
         MSWord.Application wordApp;                    //Word应用程序变量
         MSWord.Document wordDoc;                   //Word文档变量
         path = @"C:\Word_generated.doc";                      //路径
         wordApp = new MSWord.ApplicationClass();  //初始化
        //如果已存在,则删除
        if (File.Exists((string)path))
        {
            File.Delete((string)path);
        }
        Object Nothing = Missing.Value;
        wordDoc = wordApp.Documents.Add(ref Nothing, ref Nothing, ref Nothing, ref Nothing);
       MSWord.Paragraph oPara1;
      oPara1 = wordDoc.Content.Paragraphs.Add(ref Nothing);
      oPara1.Range.Text = "1     范围";
     //设定字体风格
      if (first_rank_title_fontStyle == "bold")
          oPara1.Range.Font.Bold = 5;
      else if (first_rank_title_fontStyle == "italic")
          oPara1.Range.Font.Italic = 1;
    //设定字体种类
      if (first_rank_title_fontName == "song typeface")
          oPara1.Range.Font.Name = "宋体";
      else if(first_rank_title_fontName=="Lisu")
          oPara1.Range.Font.Name = "隶书";
      if(first_rank_title_fontColor=="black")
      oPara1.Range.Font.Color = MSWord.WdColor.wdColorBlack;
      else if(first_rank_title_fontColor=="red")
      oPara1.Range.Font.Color = MSWord.WdColor.wdColorRed;
      else if (first_rank_title_fontColor == "yellow")
      oPara1.Range.Font.Color = MSWord.WdColor.wdColorYellow;
      else if (first_rank_title_fontColor == "blue")
      oPara1.Range.Font.Color = MSWord.WdColor.wdColorBlue;
      else if (first_rank_title_fontColor == "white")
      oPara1.Range.Font.Color = MSWord.WdColor.wdColorWhite;      oPara1.Range.Font.Size = Convert.ToInt32(first_rank_title_fontSize);
      oPara1.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphLeft;
      oPara1.Range.InsertParagraphAfter();     MSWord.Paragraph oPara1_1;
    oRng = wordDoc.Books.get_Item(ref oEndOfDoc).Range;
    oPara1_1= wordDoc.Content.Paragraphs.Add(ref oRng);
    oPara1_1.Range.Text = "      1.1 标识";
    if (second_rank_title_fontName == "song typeface")
        oPara1_1.Range.Font.Name = "宋体";
    else if (second_rank_title_fontName == "Lisu")
        oPara1_1.Range.Font.Name = "隶书";    oPara1_1.Range.Font.Size = Convert.ToInt32(second_rank_title_fontSize);
    if (second_rank_title_fontStyle == "bold")
        oPara1_1.Range.Font.Bold = 5;
    else if (second_rank_title_fontStyle == "italic")
     oPara1_1.Range.Font.Italic = 1;
    if (second_rank_title_fontColor == "black")
        oPara1_1.Range.Font.Color = MSWord.WdColor.wdColorBlack;
    else if (second_rank_title_fontColor == "red")
        oPara1_1.Range.Font.Color = MSWord.WdColor.wdColorRed;
    else if (second_rank_title_fontColor == "yellow")
        oPara1_1.Range.Font.Color = MSWord.WdColor.wdColorYellow;
    else if (second_rank_title_fontColor == "blue")
        oPara1_1.Range.Font.Color = MSWord.WdColor.wdColorBlue;
    else if (second_rank_title_fontColor == "white")
        oPara1_1.Range.Font.Color = MSWord.WdColor.wdColorWhite;
    oPara1_1.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphLeft;
    oPara1_1.Range.InsertParagraphAfter();
    MSWord.Paragraph oPara1_2;
    oRng = wordDoc.Books.get_Item(ref oEndOfDoc).Range;
    oPara1_2 = wordDoc.Content.Paragraphs.Add(ref oRng);
    oPara1_2.Range.Text = "      1.2 系统概述";
    if (second_rank_title_fontName == "song typeface")
        oPara1_2.Range.Font.Name = "宋体";
    else if (second_rank_title_fontName == "Lisu")
        oPara1_2.Range.Font.Name = "隶书";
    oPara1_2.Range.Font.Size = Convert.ToInt32(second_rank_title_fontSize);
    if (second_rank_title_fontStyle == "bold")
        oPara1_2.Range.Font.Bold = 5;
    else if (second_rank_title_fontStyle == "italic")
        oPara1_2.Range.Font.Italic = 1;
    if (second_rank_title_fontColor == "black")
        oPara1_2.Range.Font.Color = MSWord.WdColor.wdColorBlack;
    else if (second_rank_title_fontColor == "red")
        oPara1_2.Range.Font.Color = MSWord.WdColor.wdColorRed;
    else if (second_rank_title_fontColor == "yellow")
        oPara1_2.Range.Font.Color = MSWord.WdColor.wdColorYellow;
    else if (second_rank_title_fontColor == "blue")
        oPara1_2.Range.Font.Color = MSWord.WdColor.wdColorBlue;
    else if (second_rank_title_fontColor == "white")
        oPara1_2.Range.Font.Color = MSWord.WdColor.wdColorWhite;
    oPara1_2.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphLeft;
    oPara1_2.Range.InsertParagraphAfter();
    MSWord.Paragraph oPara1_2_content;
    oRng = wordDoc.Books.get_Item(ref oEndOfDoc).Range;
    oPara1_2_content = wordDoc.Content.Paragraphs.Add(ref oRng);
    if (second_rank_content_fontName == "song typeface")
        oPara1_2_content.Range.Font.Name = "宋体";
    else if (second_rank_content_fontName == "Lisu")
        oPara1_2_content.Range.Font.Name = "隶书";
    oPara1_2_content.Range.Font.Size = Convert.ToInt32(second_rank_content_fontSize);
    if (second_rank_content_fontStyle == "bold")
        oPara1_2_content.Range.Font.Bold = 5;
    else if (second_rank_content_fontStyle == "italic")
        //oPara1_2_content.Range.Font.Italic = 1;
        if (second_rank_content_fontColor == "black")
            oPara1_2_content.Range.Font.Color = MSWord.WdColor.wdColorBlack;
        else if (second_rank_content_fontColor == "red")
            oPara1_2_content.Range.Font.Color = MSWord.WdColor.wdColorRed;
        else if (second_rank_content_fontColor == "yellow")
            oPara1_2_content.Range.Font.Color = MSWord.WdColor.wdColorYellow;
        else if (second_rank_content_fontColor == "blue")
            oPara1_2_content.Range.Font.Color = MSWord.WdColor.wdColorBlue;
        else if (second_rank_content_fontColor == "white")
            oPara1_2_content.Range.Font.Color = MSWord.WdColor.wdColorWhite;
    oPara1_2_content.Range.Text = "       系统的概述";
    
    oPara1_2_content.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphLeft;
    oPara1_2_content.Range.InsertParagraphAfter();
    MSWord.Paragraph oPara1_3;
    oRng = wordDoc.Books.get_Item(ref oEndOfDoc).Range;
    oPara1_3 = wordDoc.Content.Paragraphs.Add(ref oRng);
    oPara1_3.Range.Text = "      1.3 文档概述";
    if (second_rank_title_fontName == "song typeface")
        oPara1_3.Range.Font.Name = "宋体";
    else if (second_rank_title_fontName == "Lisu")
        oPara1_3.Range.Font.Name = "隶书";
    oPara1_3.Range.Font.Size = Convert.ToInt32(second_rank_title_fontSize);
    if (second_rank_title_fontStyle == "bold")
        oPara1_3.Range.Font.Bold = 5;
    else if (second_rank_title_fontStyle == "italic")
        oPara1_3.Range.Font.Italic = 1;
    if (second_rank_title_fontColor == "black")
        oPara1_3.Range.Font.Color = MSWord.WdColor.wdColorBlack;
    else if (second_rank_title_fontColor == "red")
        oPara1_3.Range.Font.Color = MSWord.WdColor.wdColorRed;
    else if (second_rank_title_fontColor == "yellow")
        oPara1_3.Range.Font.Color = MSWord.WdColor.wdColorYellow;
    else if (second_rank_title_fontColor == "blue")
        oPara1_3.Range.Font.Color = MSWord.WdColor.wdColorBlue;
    else if (second_rank_title_fontColor == "white")
        oPara1_3.Range.Font.Color = MSWord.WdColor.wdColorWhite;
    oPara1_3.Range.Font.Bold = 5;
    oPara1_3.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphLeft;
    oPara1_3.Range.InsertParagraphAfter();
    MSWord.Paragraph oPara1_3_content;
    oRng = wordDoc.Books.get_Item(ref oEndOfDoc).Range;
    oPara1_3_content = wordDoc.Content.Paragraphs.Add(ref oRng);
    oPara1_3_content.Range.Text = "       文档的概述";
    if (second_rank_content_fontName == "song typeface")
        oPara1_3_content.Range.Font.Name = "宋体";
    else if (second_rank_content_fontName == "Lisu")
        oPara1_3_content.Range.Font.Name = "隶书";
    oPara1_3_content.Range.Font.Size = Convert.ToInt32(second_rank_content_fontSize);
    if (second_rank_content_fontStyle == "bold")
        oPara1_3_content.Range.Font.Bold = 5;
    else if (second_rank_content_fontStyle == "italic")
        oPara1_3_content.Range.Font.Italic = 1;
        if (second_rank_content_fontColor == "black")
            oPara1_3_content.Range.Font.Color = MSWord.WdColor.wdColorBlack;
        else if (second_rank_content_fontColor == "red")
            oPara1_3_content.Range.Font.Color = MSWord.WdColor.wdColorRed;
        else if (second_rank_content_fontColor == "yellow")
            oPara1_3_content.Range.Font.Color = MSWord.WdColor.wdColorYellow;
        else if (second_rank_content_fontColor == "blue")
            oPara1_3_content.Range.Font.Color = MSWord.WdColor.wdColorBlue;
        else if (second_rank_content_fontColor == "white")
            oPara1_3_content.Range.Font.Color = MSWord.WdColor.wdColorWhite;
    oPara1_3_content.Range.Font.Bold = 5;
    oPara1_3_content.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphLeft;
    oPara1_3_content.Range.InsertParagraphAfter();
       object format = MSWord.WdSaveFormat.wdFormatDocument;
    wordDoc.SaveAs(ref path, ref format, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing);
    //关闭wordDoc文档对象 
    wordDoc.Close(ref Nothing, ref Nothing, ref Nothing);
    //关闭wordApp组件对象 
    wordApp.Quit(ref Nothing, ref Nothing, ref Nothing);
    Console.WriteLine(path + " 创建完毕!");

解决方案 »

  1.   

    每写一段就重新更新Range
    range=app.ActiveDocument.Paragh.Last.Range
    再重新设定
      

  2.   

    请问,您能写一段示例代码吗?oRng = wordDoc.Books.get_Item(ref oEndOfDoc).Range;
      oPara1_3_content = wordDoc.Content.Paragraphs.Add(ref oRng);这句话就是每次都获取最后一个光标的位置啊!一段段插,现在就是粗体和斜体的那个相互覆盖,其他的都是好好的,求高手解答,解决问题就给分,急啊,实验室的项目!