Параметры проверки Word Interop (COM) - PullRequest
0 голосов
/ 15 октября 2019

У меня есть документы, которые не сохраняют свои варианты проверки. У меня есть некоторый код, который теперь гарантирует, что все стили установлены на правильном языке и включены проверки:

For Each s As Style In oDocument.Styles
  Select Case s.Type
    Case WdStyleType.wdStyleTypeCharacter, WdStyleType.wdStyleTypeParagraph, WdStyleType.wdStyleTypeTable
      s.NoProofing = False
      s.LanguageID = WdLanguageID.wdEnglishUK
  End Select
Next

Если я проверяю параметры проверки в документе без выделения текста, отображается следующее: ПроверкаПараметры, текст не выделен

enter image description here

Если при проверке параметров проверки в документе выбран весь текст, отображается следующее: Параметры проверки, Весь текстВыбрано

enter image description here

Я пробовал следующий фрагмент кода, но он не работал:

For Each range As Range In oDocument.Words
  range.LanguageID = WdLanguageID.wdEnglishUK
  range.NoProofing = False
  range.LanguageDetected = False
Next

1 Ответ

0 голосов
/ 15 октября 2019

Поведение, описанное в вопросе, указывает на то, что в документе присутствует смешанное форматирование языка.

Во-первых, форматирование языка может применяться напрямую (аналогично форматированию шрифта), а не управляться исключительно стилями. Язык, определенный в стиле, будет , а не переопределять прямое форматирование языка.

Кроме того, «странное» поведение при форматировании языка часто возникает, когда документ создается на компьютере, где язык операционной системы по умолчанию установленотличается от языка по умолчанию Word. Проблема началась с Office 97, где Microsoft изменила поведение Word по умолчанию и проверила язык Windows и применила его к новому документу, если язык Word по умолчанию не идентичен. Информация вписывается глубоко в структуру документа, где пользовательский интерфейс Word не может ее изменить. Его можно удалить только путем редактирования основного Word Open XML.

Из-за массовых жалоб со стороны специалистов, использующих Word, в более поздних версиях поведение было несколько смягчено до такой степени, что при выборе всего тела документа (Ctrl+ A) затем непосредственное применение нужного языка может в большинстве случаев предотвратить неправильное форматирование вновь добавленного текста на языке Windows.

Если выбор всего документа вручную и непосредственное применение языка не изменяет поведение (эквивалент объектной моделиDocument.Content.LanguageID =), единственным выходом было бы углубиться в «zip-пакет» документа, проверить XML, чтобы отследить, где хранится другой язык, и удалить его. Эта информация может использоваться для создания решения с помощью Open XML SDK (или с использованием стандартных пространств имен Packaging и XML в .NET Framework), чтобы его можно было использовать с «любым» документом (YMMV) * ​​1012 *

Примечание:Я сделал это вручную, но это было некоторое время назад, поэтому я не помню точно, в каком XML-файле в zip-пакете написан язык Windows.

...