Имя: Пароль:
1C
 
Работа с Excel и Попытка... Исключение
0 Nicole
 
04.04.22
11:26
Выгружаю табличный документ в Excel, потом выполняю обработку полученного файла:

Лист.Range(Лист.Cells(1, 1), Лист.Cells(ВсегоСтрок, ВсегоКолонок)).FormulaR1C1 = МассивЯчеек; //Если тут ошибка, то скорее всего, косяк в формуле    

И вот эту строку кода не получается "обернуть" в конструкцию Попытка ... Исключение; если я неверно указала формулу (а в случае использования сложных формул это тот еще квест), то программа просто зависает.

Есть какие-то пути решения проблемы?
Заранее огромное спасибо.
1 Vadim_37
 
04.04.22
11:30
а если сначала проверять корректность а потом выгружать в файл?
2 RomaH
 
naïve
04.04.22
11:35
(0) зависает? или выводит сообщение интерактивное?
3 Смотрящий
 
04.04.22
11:37
(0) Объект экселя выбрасывает тебе диалог при криво введенной формуле, как при интерактивной работе и ждет реакции.
Для тебя это выглядит как "зависание" ))
При создании объекта напиши .DisplayAlerts = 0
4 vde69
 
04.04.22
11:38
(3) +

только при закрытии надо вернуть назад, ОБЯЗАТЕЛЬНО
5 Смотрящий
 
04.04.22
11:39
(4) Только если есть воркбуки открытые кроме твоей
Иначе закрывать книгу и прибивать объект
6 Смотрящий
 
04.04.22
11:41
(0) Не прибьешь объект - он останется висеть в памяти, как копия экселя запущенная
Раз 10 откроешь обработку и ребут сервера - вся память сожрана
7 Nicole
 
04.04.22
12:21
(6) Книга.Close(0); Excel.DisplayAlerts = 1; Excel.Quit() - нормально?
8 Смотрящий
 
04.04.22
12:27
Книга.Close();
Если Excel.WorkBooks.Count() = 0 Тогда
Excel.Quit();
Иначе
Excel.DisplayAlerts = 1;
КонецЕсли;

Вроде так

Да и при создании объекта Excel добавь .Visible = 0 - иначе в файловой базе выскочит окно у юзера
9 Nicole
 
04.04.22
12:29
(8) А не сработало.... Добавила DisplayAlerts, но в Исключение не перешла...
10 Смотрящий
 
04.04.22
12:32
Но и не "зависла" ?
11 Nicole
 
04.04.22
12:37
(10) Да нет, отчего же. Зависла.
12 Вафель
 
04.04.22
12:39
у тебя пересчет сразу идет. его можно отключить
13 Nicole
 
04.04.22
12:41
(10) Правда, и ошибку в формуле нашла, виснуть перестала, но это ж не дело. У меня еще этих формул - косой десяток.
14 Kassern
 
04.04.22
12:43
(11) не удивительно, скорее всего в попытке 1с ждет ответа от ком соединения. А он не приходит, так как обратная сторона ждет действий от вас в связи с ошибкой. Я так понимаю вы делаете эксельки для дальнейшей работы в них? Если нет, то проще же через табличный документ все сделать и сохранить готовый результат в эксель
15 Aleksey
 
04.04.22
12:46
(14) а как формулы сохранять?
16 ДедМорроз
 
04.04.22
12:46
DisplayAlerts на ошибки не распространяется.
На ошибке excel остается в режиме ввода формулы.
И в Исключение вы не попадете,так как для excel это не исключение.
17 Смотрящий
 
04.04.22
12:52
18 Aleksey
 
04.04.22
12:52
(12) типа  Excel.Sheets(1).EnableCalculation = 0;
19 Kassern
 
04.04.22
12:53
(15) а смысл их сохранять, если дальше с экселем не работать? У вас же есть 1С, все можно сделать здесь)
20 Aleksey
 
04.04.22
12:55
(19) почему не работать.
Ну вот к примеру у меня прайс заказ, т.е. формирует в екселе прайс лист и заполняю формулы для расчета суммы заказа. Клиент просто пишет количество в этом файлике и сразу видеть сумму заказа
Все хорошо, только вот после формирования приходиться цепляться екселем и
   Ехсел.Range("K"+й).FormulaR1C1 = Ехсел.Range("K"+й).Value;
21 ДедМорроз
 
04.04.22
12:57
Вообще-то,в исключение свалится после таймаута по Com-соединению с Com-сервером в жругом процессе,но таи счет на минуты.
22 Kassern
 
04.04.22
13:28
(20) а не проще веб морду сделать и ссылку скинуть клиенту? Далее простой апишкой получать данные клиента. Без всяких эеселей и ком соединений
23 Aleksey
 
04.04.22
14:41
(22) оюбят офлайн
24 Nicole
 
07.04.22
09:44
Вопрос решен.
Excel.Application.ErrorCheckingOptions.InconsistentFormula = Ложь.
Всем спасибо за помощь.
25 Nicole
 
07.04.22
13:01
Точнее, Excel.Application.ErrorCheckingOptions.BackgroundChecking = Истина;