Word Interop dynamic неправильное значение
От: dsalodki Беларусь http://dsalodki.wix.com/resume
Дата: 24.05.23 10:31
Оценка:
            var word = new Application { Visible = false };
            var doc = word.Documents.Add();
            doc.Activate();

            Range rng = doc.Range(0, 0);
            rng.Text = text;
            rng.Select();

            doc.Content.Select();

            var totalWords = word.Selection.Words.Count;

            var i = 0;
            var prevPercent = 0;
            var enumeratorSelection = word.Selection.Words.GetEnumerator();
            while (enumeratorSelection.MoveNext())
            {
                if (_backgroundWorker.WorkerReportsProgress && prevPercent < i * 100 / totalWords)
                {
                    prevPercent = i * 100 / totalWords;
                    _backgroundWorker.ReportProgress(prevPercent);
                }
                i++;

                dynamic w = enumeratorSelection.Current;
                int? languageId = w.LanguageID as int?;
                Log.Information(languageId.HasValue ? languageId.Value.ToString() : null);
                if (languageId.HasValue && languageId == (int)WdLanguageID.wdRussian)
                {


вывод в логе
2023-05-24 02:40:19.000 -07:00 [INF] 1033
2023-05-24 02:40:19.042 -07:00 [INF] 1033
2023-05-24 02:40:19.046 -07:00 [INF] 1033
2023-05-24 02:40:19.051 -07:00 [INF] 1033
2023-05-24 02:40:19.056 -07:00 [INF] 1033
2023-05-24 02:40:19.060 -07:00 [INF] 1033
2023-05-24 02:40:19.064 -07:00 [INF] 1033
2023-05-24 02:40:19.067 -07:00 [INF] 1033
...

реально должно выводить 1049 (wdRussian = 1049)

прикол такой если поставить брекпоинт в начале while то выводит правильно

кстати ошибка для word 2016, для моего 2021 работает

ещё можно сделать так MessageBox.Show(w.LanguageID.ToString()) и тогда первый раз неправильно, но потом OK нажимаю и показывает верно

подскажите как пофиксить
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.