文字互操作插入段落后和下一行样式

本文关键字:一行 样式 插入 互操作 段落 文字 | 更新日期: 2023-09-27 18:12:00

我正在迭代现有MS Word文档的段落,并在特定级别的标题之后插入文本段落,但是当我插入文本时,它们继承了下面段落的一些样式,并且/或下一个元素变得混乱。下面是我的代码:

foreach (Word.Paragraph paragraph in doc.Paragraphs)
{
    if (paragraph.get_Style(); != null && paragraph.get_Style() =="Heading 2")
    {
        paragraph.Range.InsertParagraphAfter();
        paragraph.Next().Reset();                            
        paragraph.Next().Range.Text = "New Text"
        paragraph.Next().set_Style("My Style");
    }
}

这很好,除非我有以下

标题2

    列表项
  • 列表项
  • 列表项

我的最终结果看起来像:

标题2新文本

  • 列表项
  • 列表项
  • 列表项

注意额外的空白项目符号。

文字互操作插入段落后和下一行样式

这个方法在Word 2013中很有效

using Microsoft.Office.Interop.Word;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication7
{
    class Program
    {
        static void Main(string[] args)
        {
            Application app = new Application();
            var doc = app.Documents.Open(@"C:'users'mhainc'desktop'test.docx");
            foreach (Microsoft.Office.Interop.Word.Paragraph paragraph in doc.Paragraphs)
            {
                if (paragraph.get_Style() != null && paragraph.get_Style().NameLocal == "Heading 2")
                {
                    paragraph.Range.InsertParagraphAfter();
                    paragraph.Next().Range.Text = "New Text'r'n";
                    paragraph.Next().Reset();
                    paragraph.Next().set_Style("Normal");
                }
            }
            doc.Save();
            doc.Close();
        }
    }
}

请注意,我已经改变了添加文本和重置调用的顺序,并在文本末尾添加了'r'n字符(换行)(没有换行,它也破坏了我的列表,但它从第一个列表项中删除了项目符号,我无法用你的代码复制你的行为:))

如果表格在文档中遵循Heading 2样式的标题,上述代码将无法正常工作。

为此,我已经构造了代码,将正确地创建您的表上面的段落。

using Microsoft.Office.Interop.Word;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication7
{
    class Program
    {
        static void Main(string[] args)
        {
            Application app = new Application();
            var doc = app.Documents.Open(@"C:'users'mhainc'desktop'test.docx");
            foreach (Microsoft.Office.Interop.Word.Paragraph paragraph in doc.Paragraphs)
            {
                if (paragraph.get_Style() != null && paragraph.get_Style().NameLocal == "Heading 2")
                {
                    bool afterTableSplit = false;
                    if (paragraph.Next().Range.Tables.Count > 0)
                    {
                        //add dummy row to the table
                        object firstRow = paragraph.Next().Range.Tables[1].Rows[1];
                        firstRow = paragraph.Next().Range.Tables[1].Rows.Add(ref firstRow);
                        //split the table after the dummy row
                        paragraph.Next().Range.Tables[1].Split(2);
                        //delete the dummy row table
                        paragraph.Next().Range.Tables[1].Delete();
                        afterTableSplit = true;
                    }
                    paragraph.Range.InsertParagraphAfter();
                    paragraph.Next().Range.Text = "New Text";
                    if (!afterTableSplit) paragraph.Next().Range.Text += "'r'n";
                    paragraph.Next().Reset();
                    paragraph.Next().set_Style("Normal");
                }
            }
            doc.Save();
            doc.Close();
        }
    }
}