我正在编写一个加载项,它使用 GroupContentControl (GCC) 来写保护使用“标题 1”样式的每个段落。一旦受到保护,这些标题只能通过加载项进行更改。为此,我编写了一个简单的方法,删除段落的 GCC,为段落的 Range.Text 属性分配一个新值,再次将样式设置为标题 1,然后设置一个新的 GCC 来保护该段落。
我还是 Office 编程的新手,我的假设是 Range 对象可以在整个过程中使用。但是,该方法行为不端:它在新段落文本后插入回车符,然后将文档中的下一段设为标题 1 段落,然后对其进行写保护。
这是我的方法,以及对日志函数的调用以查看范围如何演变:
void ChangeParagraphText (Word.Paragraph p, string NewText)
{
Log("Range 1 : " + p.Range.Start + " - " + p.Range.End);
UnlockTitle(p); // remove the paragraph's GroupContentControl
Log("Range 2 : " + p.Range.Start + " - " + p.Range.End);
p.Range.Text = NewText; // change the paragraph's text
Log("Range 3 : " + p.Range.Start + " - " + p.Range.End);
p.Range.set_Style(Globals.ThisAddIn.Application.ActiveDocument.Styles[Word.WdBuiltinStyle.wdStyleHeading1]);
Log("Range 4 : " + p.Range.Start + " - " + p.Range.End);
LockTitle(p); // write-protect the paragraph with a GroupContentControl
Log("Range 5 : " + p.Range.Start + " - " + p.Range.End);
}
运行后,以下是日志文件的内容:
Range 1 : 90 - 99
Range 2 : 90 - 97
Range 3 : 100 - 102
Range 4 : 100 - 102
Range 5 : 100 - 104
这教会了我一些有趣的事情。对于初学者来说,去掉GCC后Range的长度减少2,增加GCC时增加2。然而,重要的部分是第三个日志条目:它表明,一旦我分配了段落的 Range.Text,范围就完全改变了。这些值与我的测试文档中的下一段相匹配。
读取 Range.Text 属性还显示它以换行符 (ASCII 13) 结尾。如果我省略它,我最终会将下一段附加到我的标题 1 段落。如果我把它放进去,我最终会将第二段视为标题 1 段。这些行为都不适合我。
我的问题是:如何以编程方式更改段落的文本?我认为它必须是可能的,但如果不是,有什么解决方法?我一直想在我想更改的段落之后创建一个新段落,然后删除旧段落,但这似乎不雅。
qq_遁去的一_1
相关分类