c#Office Interop在循环浏览大文档中的每个单词时缓慢
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#Office Interop在循环浏览大文档中的每个单词时缓慢相关的知识,希望对你有一定的参考价值。
我有以下代码段循环遍历Word文档中的每个单词,找到以粗体显示的行(句子)并将它们存储在列表中,MasterSentences
。
Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();
Document doc = new Document();
object path = fileDialog.FileName;
object missing = Type.Missing;
doc = word.Documents.Open(ref path, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
string sentence = "";
foreach (Range rng in doc.StoryRanges)
{
foreach (Range rngWord in rng.Words)
{
if ((rngWord.Text.Contains("\n") || rngWord.Text.Contains("\r")) && sentence != "")
{
MasterSentences.Add(sentence);
sentence = "";
}
else if (rngWord.Bold != 0 && rngWord.Text != " " && rngWord.Text != "\t")
{
sentence += rngWord.Text;
}
}
}
问题是,对于包含23,742个单词的Word文档,这需要大约3-4分钟。
有没有办法提高速度?有没有更有效的方法来实现这一目标?
答案
谢谢大家的反馈意见。似乎使用Range.Find.Execute是正确的方法。这是我更新的主要工作代码。它现在只需要大约20秒,这是完美的。
Range rngFindBold = doc.Range();
rngFindBold.Find.Font.Bold = 1;
while (rngFindBold.Find.Execute(Format: true))
{
if (!string.IsNullOrWhiteSpace(rngFindBold.Text))
{
MasterSentences.Add(rngFindBold.Text);
}
}
以上是关于c#Office Interop在循环浏览大文档中的每个单词时缓慢的主要内容,如果未能解决你的问题,请参考以下文章
添加 Microsoft.Office.Interop.Excel 参考
如何在 C# 中使用 Microsoft.Office.Interop.Excel.Application 保存打开的文档?
C# Microsoft.Office.Interop.Word怎么获取页数和字数?