Читает только первые 4 страницы RTF-файла. Word.Application

1. Vafla 13.10.17 14:27 Сейчас в теме
Коллеги, добрый день.

Возникла проблема:
При подключении к RTF-файлу средствами Word.Application, считываются только первые несколько страниц (3-4 из 300, или ~8000 символов из ...даже затрудняюсь).
Причём только на одной машине и внезапно.
Файлы разные, но с похожей структурой (выписки банка)

Что пробовал:
Переустановку Word, переустановку всего MS Office.

На машине:
Win 10 (x64)
MS Office 2013
Платформа 1C 8.3.10.2561
Конфигурация УПП 1.3 в режиме совместимости 8.2.13 (серверная)
Запуск в толстом клиенте
Код выполняется &НаКлиенте

Собственно, часть кода:

	//Подключение к файлу
	Ворд = Новый COMОбъект("Word.Application");
	Ворд.Visible = Ложь;
	Ворд.Documents.Open(ФайлЗагрузкиMSOffice, 0, 1, 0);
	Ворд.Documents.Item(1).Activate();

	АктивныйДокумент = Ворд.ActiveDocument;

	//Постраничный обход документа
	Для НомерСтраницы = 1 По АктивныйДокумент.Content.ComputeStatistics(2) Цикл 
		Страница = АктивныйДокумент.GoTo(1, 1, НомерСтраницы);
		
		//...Обработка страницы, включающая парсинг текста и т.д., в общем, к делу не относится...
	КонецЦикла;
Показать


"АктивныйДокумент.Content.ComputeStatistics(2)" возвращает только 3-4 страницы, хотя страниц минимум 300.

"Страница = АктивныйДокумент.GoTo(1, 1, НомерСтраницы)" тоже не "шагает" дальше 3-4 страниц, даже если "НомерСтраницы" устанавливать принудительно .

Повторюсь, внезапно перестало работать только на одной машине.

Что можно сделать?
Может быть, переустановить компоненту? Как?
Копаться в реестре? Тогда, что искать?

Хелп! >.<
Вознаграждение за ответ
Показать полностью
Найденные решения
16. Irwin 554 13.10.17 16:23 Сейчас в теме +1 $m
Можно еще открыть документ в пользовательском режиме, нажать Ctrl + G, ввести номер страницы больше 4 и проверить, перейдет ли на нужную страницу. Если перейдет, то записать макрос и посмотреть какой код сформирует. По идее должен быть тот же самый с GoTo. Важно проверить имена параметров и их значения.
21. Vafla 16.10.17 10:17 Сейчас в теме
(16)
Получилось вот как:
	Ворд.Documents.Open(ФайлЗагрузкиMSOffice, 0, 0, 0);

Благодаря подсказке сформировал макрос, макрос использует "Selection.GoTo", "Selection.GoTo" не работает в режиме чтения.
Отключил режим чтения - взлетело в первоначальном варианте! :)
Всем спасибо!
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Irwin 554 13.10.17 15:05 Сейчас в теме +0.3 $m
(1) Попробуйте один из следующих вариантов:

1) АктивныйДокумент.BuiltInDocumentProperties("Number of pages")
2) АктивныйДокумент.ComputeStatistics(2)
3) АктивныйДокумент.Content.Information(1)
3. Vafla 13.10.17 15:33 Сейчас в теме
(2)
2) АктивныйДокумент.ComputeStatistics(2) - этим методом уже пользуюсь (выдаёт 4 страницы)
3) АктивныйДокумент.Content.Information(1) - метод выдаёт те же неправильные 4 страницы

1) АктивныйДокумент.BuiltInDocumentProperties("Number of pages") - метод вернул правильное количество страниц!
Но это не поможет, пока метод "АктивныйДокумент.GoTo(1, 1, НомерСтраницы)" продолжает останавливаться на четвёртой странице.
Это не позволяет получить содержимое страниц 5, 6... и распарсить их :(

В текущем файле 187 страниц, ".GoTo(1, 1, 5)" - возвращает страницу 4.
4. sssss_aaaaa_2011 13.10.17 15:39 Сейчас в теме
(3)А теперь посмотрите на принтер. Разбивка на страницы таки зависит от принтера, но сей факт почему-то упорно почти всеми игнорируется.
10. Vafla 13.10.17 16:02 Сейчас в теме
(4) Принтер по умолчанию менял, в параметре "Ворд.ActivePrinter" значения менялись, но результат от этого не меняется :(
5. sssss_aaaaa_2011 13.10.17 15:40 Сейчас в теме
Напишите ваше сообщение
(3)И еще посмотрите, включено ли на проблемной машине в Word авторазбиение на страницы(autopagination).
7. Vafla 13.10.17 15:45 Сейчас в теме
Забыл добавить:
в пользовательском режиме документ открывается нормально,
проблема только при программном (скрытом) чтении.
14. Vafla 13.10.17 16:13 Сейчас в теме
(5) Не удалось проверить.
Это параметр документа, или параметр самого Word?
В COM-объекте тоже ничего похожего не нашёл...
15. sssss_aaaaa_2011 13.10.17 16:14 Сейчас в теме
(14) Это параметр самого Word
6. Irwin 554 13.10.17 15:45 Сейчас в теме
(3) У вас АктивныйДокумент.Content.ComputeStatistics(2), в моей строке без..

Попробуйте GoTo(1, 2). Это должен быть переход на следующую страницу.
Или даже так: GoTo(1, 2,, "5")
8. Vafla 13.10.17 15:55 Сейчас в теме
(3). Да, Вы правы, "АктивныйДокумент.ComputeStatistics(2)" выдаёт правильное количество страниц.

"GoTo(1, 2)" - похоже не осуществляет переход на новую страницу.

Дело в том, что после перехода на страницу я вычитываю номер первого символа страницы (номер относительно документа) и длину страницы.

В цикле из 100 проходов "GoTo(1, 2)" все сто номеров первого символа страницы и длина страницы совпали.
9. Irwin 554 13.10.17 15:59 Сейчас в теме
(8) Попробуйте GoTo(1, 2,, "5"), где "5" - это номер страницы
11. Vafla 13.10.17 16:08 Сейчас в теме
(9) Проходит 4 страницы, потом всё время получает данные первой страницы
12. sssss_aaaaa_2011 13.10.17 16:13 Сейчас в теме
(11) Раз у вас АктивныйДокумент.Content.ComputeStatistics(2) и АктивныйДокумент.ComputeStatistics(2) выдают разные результаты, то что-то не то с Content. Сравнить бы их на разных машинах.
13. Irwin 554 13.10.17 16:13 Сейчас в теме
(11) Как вариант могу предложить попробовать еще вот так: GoTo(1, 1,, "5").
17. Vafla 13.10.17 16:26 Сейчас в теме
(13) Теперь дублируются данные четвёртой страницы :)
16. Irwin 554 13.10.17 16:23 Сейчас в теме +1 $m
Можно еще открыть документ в пользовательском режиме, нажать Ctrl + G, ввести номер страницы больше 4 и проверить, перейдет ли на нужную страницу. Если перейдет, то записать макрос и посмотреть какой код сформирует. По идее должен быть тот же самый с GoTo. Важно проверить имена параметров и их значения.
21. Vafla 16.10.17 10:17 Сейчас в теме
(16)
Получилось вот как:
	Ворд.Documents.Open(ФайлЗагрузкиMSOffice, 0, 0, 0);

Благодаря подсказке сформировал макрос, макрос использует "Selection.GoTo", "Selection.GoTo" не работает в режиме чтения.
Отключил режим чтения - взлетело в первоначальном варианте! :)
Всем спасибо!
22. Irwin 554 16.10.17 10:22 Сейчас в теме
(21) Смущает только то, что на остальных компьютерах работало. :)
23. Vafla 16.10.17 10:24 Сейчас в теме
(22) Сам в шоке. Приходилось просить коллегу запускать обработку
24. Vafla 16.10.17 10:27 Сейчас в теме
(22) У 2-х пользователей каждый рабочий день (уже год) запускается обработка с этим кодом. А сломалось у разработчика... :)
18. FreeFin 31 13.10.17 16:52 Сейчас в теме
Не успевает. Если программно. Сначала конвертит, потом считает. Пауза нужна. Что-то файл лочит временно. Тормозной диск, антивирь... можно гадать.
sssss_aaaaa_2011; +1 Ответить
19. sssss_aaaaa_2011 13.10.17 16:57 Сейчас в теме
(18)
Тормозной диск, антивирь...
А если они вместе, то вообще труба дело.
20. Vafla 16.10.17 09:23 Сейчас в теме
(18)
(19)
Установил 10-секундную задержку после каждого действия:

	Ворд.Documents.Open(Загрузка.Файл, 0, 1, 0);
	...//10 сек
	Ворд.Documents.Item(1).Activate();
	...//10 сек	
	АктивныйДокумент = Ворд.ActiveDocument;
	...//10 сек

Антивирус выключен (ESET).
Осталось без изменений. К слову, на машинах где "работает", стоят диски куда медленнее. Ковыряюсь дальше...
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот