Top.Mail.Ru
Ответы

Свойство возвращает неправильное количество слов в документе?

Microsoft.Office.Interop.Word. Свойство doc.Content.Words.Count возвращает неверное значение количество слов большее чем в строке состояния самого приложения Word.Даже если в файле только одно слово свойство возвращает значение 2. Чем больше строк тем больше разница Есть ли свойство или метод которым можно получить такое же количество слов что и в строке состояния Word?

По дате
По рейтингу
Аватар пользователя
Новичок
1мес

Да, вы абсолютно правы:
doc.Content.Words.Count в Microsoft.Office.Interop.Wordне совпадает с числом слов в строке состояния Word. Это известное поведение, связанное с тем, что Content.Words считает всё, что Word считает "словом" — включая знаки препинания, пробелы и спецсимволы.

🧠 Почему Words.Count даёт "лишние слова":

12
doc.Content.Words.Count
  • включает знаки препинания (например, . или , — как отдельные "слова"),

  • считает переходы строк, символы табуляции, объекты,

  • и даже пустые абзацы.

➡️ Поэтому одно слово может давать 2 или 3 в .Words.Count.

✅ Как получить точное количество слов как в Word (строка состояния)

Используй свойство doc.ComputeStatistics с флагом WdStatistic.wdStatisticWords — это единственный способ, который даёт то же число, что и строка состояния Word:

12
int wordCount = doc.ComputeStatistics(Microsoft.Office.Interop.Word.WdStatistic.wdStatisticWords);

🔹 Этот метод возвращает то же значение, что Word показывает в нижнем левом углу.

❗ Важно:

  • Метод работает даже если документ ещё не сохранён.

  • Работает быстрее и точнее, чем Content.Words.Count.

  • Поддерживается с ранних версий Word (2003+).

Пример:

123456789101112
using Word = Microsoft.Office.Interop.Word;

var app = new Word.Application();
var doc = app.Documents.Open(@"C:\path\to\file.docx");

int accurateWordCount = doc.ComputeStatistics(Word.WdStatistic.wdStatisticWords);

Console.WriteLine($"Точное количество слов: {accurateWordCount}");

doc.Close(false);
app.Quit();

🧩 Итог:

  • doc.Content.Words.Countне используйте для точного подсчёта.

  • ✅ Используйте doc.ComputeStatistics(WdStatistic.wdStatisticWords) — это тот самый счётчик, что в Word GUI.

Благодарим за вопрос. GLAVQA

Аватар пользователя
Гуру
1мес

Пустая строка