|
Работа с 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 = Истина;
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |