gpt4 book ai didi

c# - 编辑 Word 文档范围的文本会删除段落格式

转载 作者:行者123 更新时间:2023-12-02 05:27:48 24 4
gpt4 key购买 nike

我将 Office Interop 与 MS Word (Microsoft.Office.Interop.Word) 和 Microsoft.Office.Tools.Word 结合使用,以修改 Word 加载项中的 word 文档。我有一个范围,其中包含我要编辑的特定文本。

当我更新 Text 对象时,Range 的段落格式被重置,特别是 Alignment 和 LeftIndent。我可以将 Alignment 和 LeftIndent 保存在临时变量中并重置它们,但这并不理想。 有没有办法阻止 ParagraphFormat 被重置,如果没有,是否有任何其他我可能忘记需要保存的属性(我只是意识到段落间距前后也被重置...)。

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

最佳答案

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

// 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;

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

如果复制 ParagraphFormat 没有帮助,那么您可能需要考虑设置 Range.FormattedText属性而不是 Range.Text。

关于c# - 编辑 Word 文档范围的文本会删除段落格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12828560/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com