使用文本

处理文本

Word 文档中的文本组织为 Run 节点(共享相同字体格式的连续字符),这些节点被包含在 Paragraph 节点中。Aspose.Words FOSS for .NET 直接公开这两者,以及用于字符格式的 Font、用于段落级别格式的 ParagraphFormat,以及用于在树的任意部分读取或替换文本的 Range。本指南涵盖运行和字体、段落格式、读取和替换文本、批注以及段落级列表格式。


运行和字符格式

一个 Run 表示一段共享同一套格式的文本;它的 Text 属性保存纯文本内容,而它的 Font 属性(一个 Font 对象)保存字符级别的格式——Name、Size、Bold、Italic、Underline、Color、HighlightColor、Subscript/Superscript、StrikeThrough,以及更多。Font.ClearFormatting() 将运行的字体重置为默认。段落的运行可以通过其 Runs 属性获取,这是一个 RunCollection。


段落和段落格式

Paragraph 是一个复合节点,包含一个段落的运行(以及其他内联内容);文档或正文的段落以 ParagraphCollection(Body.Paragraphs)的形式公开。Paragraph.ParagraphFormat(一个 ParagraphFormat 对象)控制段落级别的布局——Alignment、缩进(LeftIndent、RightIndent、FirstLineIndent)、间距(SpaceBefore、SpaceAfter、LineSpacing、LineSpacingRule)以及分页行为(KeepTogether、KeepWithNext、PageBreakBefore、WidowControl)。ParagraphFormat.ClearFormatting() 将这些重置为默认,Paragraph.JoinRunsWithSameFormatting() 合并具有相同格式的相邻运行。


使用 Range 读取和替换文本

每个包含内容的节点——Document、Section、Paragraph或Run——都公开一个Range。Range.Text返回该范围内所有内容的纯文本,Range.Replace(pattern, replacement)在仅该范围内执行查找替换,例如,你可以只替换某段落中的文字而不影响文档的其余部分。Range.Delete()直接删除该范围的内容。


Comments

一个Comment节点将评论锚定在文本中的某个位置;使用new Comment(doc, author, initial, dateTime)创建节点,并用SetText(text)设置其正文文本,然后像其他节点一样将其插入文档。Comment.AddReply(author, initial, dateTime, text)附加一个线程回复,RemoveReply(reply) / RemoveAllReplies()用于删除它们。文档的评论会被收集在一个CommentCollection中。


段落级别的列表格式化

Paragraph.ListFormat(一个ListFormat对象)报告并控制段落是否属于列表:IsListItem和ListLevelNumber报告其当前状态,ApplyBulletDefault()和ApplyNumberDefault()将段落转换为默认的项目符号或编号列表项,ListIndent() / ListOutdent()改变其列表嵌套层级,RemoveNumbers()则将其恢复为普通段落。


提示与最佳实践

  • 在使用构建器写入文本之前先在DocumentBuilder.Font上设置字体属性,而不是先写入文本后再重新格式化各个Run对象。
  • 将Range.Replace的作用范围限定在覆盖实际需要更改内容的最小范围——当更改不应应用于整个文档时,最好在Paragraph或Section的范围上调用,而不是整篇文档。
  • 在一系列程序化编辑后调用 Paragraph.JoinRunsWithSameFormatting(),以避免不必要的碎片化运行结构。
  • 当内置默认足够时,使用 ListFormat.ApplyBulletDefault() / ApplyNumberDefault() 快速生成默认列表,而不是手动构建列表定义。
  • 将 Comment.AddReply 的结果读取为 Comment 节点本身——回复是完整的评论对象,而不是普通字符串。

常见问题

问题原因修复
为 Run 的 Font 设置格式不会在视觉上更改相邻文本相邻文本位于另一个 Run 中,并拥有其自己的 Font 实例定位并格式化每个受影响的 Run,或在写入前通过 DocumentBuilder.Font 设置格式
Range.Replace 更改了预期区域之外的文本Replace 在 Document.Range 上被调用,而不是在更窄的节点范围内在特定的 Paragraph、Section 或其他节点的 Range 上调用 Replace
段落看起来像列表项,但 IsListItem 为 false项目符号/编号是手动文本,而不是真正的列表格式使用 ListFormat.ApplyBulletDefault() 或 ApplyNumberDefault() 应用真实的列表格式,而不是手动输入字符
文档中 Run 节点的数量远超预期反复进行的小编辑会导致运行块被拆分且未重新合并在一批编辑完成后调用 Paragraph.JoinRunsWithSameFormatting()

FAQ

Run 与 Paragraph 有何区别?

一个 Run 是一段共享同一字符格式(Font)的文本;一个 Paragraph 是复合节点,包含一个或多个运行(以及其他内联内容)以及段落级格式(ParagraphFormat)。

如何读取文档或章节中的所有文本?

读取该节点的 Range 的 Text 属性 — 例如,document.Range.Text 或 section.Range.Text。

我如何仅在一个段落中查找并替换文本?

在该 Paragraph 的 Range 上调用 Replace(pattern, replacement),而不是在 Document.Range 上。

我如何向文档添加注释?

使用 new Comment(doc, author, initial, dateTime) 创建它,使用 SetText(text) 设置其文本,并将其插入树中;使用 Comment.AddReply(author, initial, dateTime, text) 对其进行回复。

我如何将段落转换为项目符号列表项?

在该段落的 ListFormat 上调用 ApplyBulletDefault();如果需要编号列表,请使用 ApplyNumberDefault()。


API Reference 摘要

类/方法描述
Run一段共享同一字符格式的文本。
Font字符级格式 — 名称、大小、粗体、斜体、颜色等。
Paragraph复合节点,包含一个段落的运行和格式设置。
ParagraphFormat段落级格式 — 对齐、缩进、间距、分页。
ParagraphCollection类型化的 Paragraph 节点集合,例如 Body.Paragraphs。
Range文档的连续区域;支持 Text、Replace 和 Delete。
Comment一个锚定在文本位置的线程式评论。
CommentCollection文档的评论集合。
ListFormat控制段落是否以及如何参与列表。

另请参阅

 中文