当前位置: 首页 > 知识库问答 >
问题:

编辑Word文档范围的文本将删除段落格式

华衡
2023-03-14

我正在将Office Interop与MS Word(Microsoft.Office.Interop.Word)和Microsoft一起使用。办公室工具。Word可在Word加载项中修改Word文档。我有一个包含我要编辑的特定文本的范围。

当我更新Text对象时,Range的段落格式将被重置,特别是对齐和左键。我可以在临时变量中保存对齐和左缩进并重置它们,但这并不理想。是否有一种方法来阻止段落格式被重置,如果没有,是否有任何其他属性,我可能会忘记,我需要保存(我刚刚意识到之前和之后的段落行间距也得到重置...)。

Microsoft.Office.Interop.Word.Range range = myObject.range;
var oldAlignment = range.ParagraphFormat.Alignment;
var oldLeftIndent = range.ParagraphFormat.LeftIndent;

range.Text = "new text";
range.ParagraphFormat.Alignment = oldAlignment;
range.ParagraphFormat.LeftIndent = oldLeftIndent;

编辑:我刚刚尝试将ParagraphFormat保存为临时变量,然后用它重置格式,但是临时变量也会丢失其格式。

oldParagraphFormat = range.ParagraphFormat;
range.Text = "new text";
range.ParagraphFormat = oldParagraphFormat; // oldParagraphFormat's objects are reset

共有1个答案

邢炯
2023-03-14

尝试创建Range的副本。在更改文本之前设置对象。您可以通过段落格式执行此操作。重复的对象。这将保留旧的段落格式值。更改范围的文本并重置其段落格式后,可以从副本中恢复值。

// Get current value of ParagraphFormat.
Microsoft.Office.Interop.Word.Range range = myObject.range;
var oldParagraphFormat = myObject.range.ParagraphFormat.Duplicate;

// Change the range's text. This will reset ParagraphFormat, so reapply the previous value.
range.Text = "new text";
range.ParagraphFormat = oldParagraphFormat;

关于正在发生的事情的一些背景:改变范围。Text本质上重置范围对象,因为范围是文本格式。因此,在不包含任何格式信息的情况下更改文本将导致以前的所有格式丢失。(很像更改HTML标记的innerText属性会导致该标记丢失所有子标记。)

如果复制段落格式没有帮助,那么您可能需要考虑设置范围。FormattedText属性而不是Range。文本。

 类似资料:
  • 因此,要求就像使word文档的一部分(特别是标题或段落或alteast范围)

  • 到目前为止,我们介绍了一些用于在文件中移动和选择区域的方法,现在让我们真正来修改一些文本吧。很显然你可以通过打字的方式来输入字符,但是有另一些方法使删除和处理字符变得更简捷易用。 基本操作 有一些用于基本操作的很酷的快捷键,他们十分易用。这些操作包括整行移动文本,整行复制,以及改变大小写。 ctrl-T 交换光标两边字符的位置 cmd-J 将下一行拼接到当前行的末尾 ctrl-cmd-up, ct

  • 在使用ApachePOI写入word文档时,对于必须根据某个“计数”动态复制段落的位置,这些段落的标题必须按照章节顺序编号。假设它是word文档中的第7节,那么其中每个段落的标题应按顺序编号为7.1、7.2等。 尽管我看到了一些解决方案,其中考虑了word文档的xml,并使用了XWPFN编号。 还有其他更简单的方法吗? 或 如果我的word模板已经有了一个带有编号标题的段落,并且我必须多次复制相同

  • 正如您在word文档中看到的,有许多带有要点的问题。现在,我正在尝试使用apache POI从文件中提取每个段落。这是我当前的代码 上述方法的问题在于它打印的是每一行而不是段落。此外,项目符号也从提取的字符串中删除。返回一个纯字符串。 谁能解释一下我做错了什么。也请建议如果你有一个更好的想法来解决它。

  • 我有一个很大的。docx文档。它有100多个段落。然而,有一些垃圾段落,我需要删除。例如,那些需要删除的段落有一个关键字“无”。我如何使用python删除那些有关键字“none”的段落。这是我目前所拥有的,但它只能删除空白段落。我如何修改它以达到我的目的?

  • 我试图使用APACHE POI创建一个段落,其中包含左边的图像和右边的一些文本。有什么方法可以设置这两个组件之间的对齐方式吗? 下面是在表中执行我想要的操作的代码,但它也呈现了这两个段落。 提前谢谢你。