我有一个代码,我使用主互操作程序集迭代 Word 文档中的每个段落。我本质上所做的是将每个段落中的所有文本提取到一个字符串中。然后我在该字符串中搜索特定的关键词/短语。如果存在,则将其与其他东西交换。然后将该段落插入回文档中。
这很有效,但是在某些文档中,发生的情况是在段落之间添加了新行。经过进一步调查,发现段落格式正在改变,即行间距从 0 增加到 12,其他事情也发生了变化,其中包括从段落中删除左缩进等。
我想知道是否有任何方法可以执行上述任务,而不会在插入文本时更改段落属性。下面包含我的代码,以展示我如何迭代文档。
在进入主要代码之前,我确实使用以下命名空间打开了一个单词应用程序和文档:
using Word = Microsoft.Office.Interop.Word
然后是下面的代码
Word.Application app = new Word.Application();
Word.Document doc = app.Documents.Open(filePath, ReadOnly: false);
打开文档后,我做了以下操作:
try
{
int totalParagraphs = document.Paragraphs.Count;
string final;
for (int i = 1; i <= totalParagraphs; i++)
{
string temp = document.Paragraphs[i].Range.Text;
if (temp.Length > 1)
{
Regex regex = new Regex(findText);
final = regex.Replace(temp, replaceText);
if (final != temp)
{
document.Paragraphs[i].Range.Text = final;
}
}
}
} catch (Exception) { }
需要注意的是,我有一个带有“temp.Length > 1”的 if 语句。我注意到除了一个空行之外什么也没有,它仍然被算作一个段落,并且该段落中存在的文本长度为一。当使用空行时,即使没有进行替换,在将其插入回时实际上也会再次添加额外的行。因此,为了解决这个问题,我只是用它来确保该段落中至少有一个字母,而不仅仅是一个空行。这样,段落之间就不会添加额外的空行。
我已经找到了我自己问题的答案。我已在下面提供了解决方案,以防其他人遇到同样的问题或希望参考。
您要做的就是在进行任何更改之前获取提取文本的段落格式属性。然后,一旦将段落重新插入,请设置我们之前提取到插入的段落的相同属性,以应对可能已进行的任何更改。完整代码如下:
try
{
int totalParagraphs = document.Paragraphs.Count;
string final;
for (int i = 1; i <= totalParagraphs; i++)
{
string temp = document.Paragraphs[i].Range.Text;
float x1 = document.Paragraphs[i].Format.LeftIndent;
float x2 = document.Paragraphs[i].Format.RightIndent;
float x3 = document.Paragraphs[i].Format.SpaceBefore;
float x4 = document.Paragraphs[i].Format.SpaceAfter;
if (temp.Length > 1)
{
Regex regex = new Regex(findText);
final = regex.Replace(temp, replaceText);
if (final != temp)
{
document.Paragraphs[i].Range.Text = final;
document.Paragraphs[i].Format.LeftIndent = x1;
document.Paragraphs[i].Format.RightIndent = x2;
document.Paragraphs[i].Format.SpaceBefore = x3;
document.Paragraphs[i].Format.SpaceAfter = x4;
}
}
}
} catch (Exception) { }
感谢您建议的解决方案。现在,Office Word 2021 对我来说不起作用。我已经尝试了很多不同的解决方案,不仅是其他人,还有我的解决方案,但都不起作用。我仍然希望找到一种方法来做到这一点。 Word 挂起并且没有应答,因此我通过任务管理器将其终止。我担心操作会破坏文档结构中的其他内容。 至少致以最诚挚的问候和感谢。:)