C # Office Interop замедляется при циклическом просмотре каждого слова в большом документе - PullRequest
0 голосов
/ 04 июня 2018

У меня есть следующий фрагмент кода, который просматривает каждое слово в документе 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;
        }
    }
}

Проблема в том, что для документа Word, содержащего 23 742 слова, требуется около 3-4 минут.

Есть ли способ улучшить скорость?Есть ли более эффективный способ сделать это?

1 Ответ

0 голосов
/ 06 июня 2018

Спасибо, ребята, за все ваши отзывы.Кажется, использование 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...