|
Ошибка программного закрытия Excel файла | ☑ | ||
---|---|---|---|---|
0
akcent25
08.10.12
✎
16:42
|
Доброго дня всем! При попытке закрытия файла Excel, данное приложение вылетает с ошибкой. использую следующий code: Функция ОткрытьФайл(ИмяФайла)
Результат = Неопределено; #Если Клиент Тогда Состояние("Идет установка связи, ждите....."); #КонецЕсли Попытка Результат = Новый Структура(); BaseOLE = Новый COMОбъект("Excel.Application"); Результат.Вставить("EXCEL", BaseOLE); ExcelФайл = BaseOLE.WorkBooks.Open(ИмяФайла); Результат.Вставить("ExcelФайл", ExcelФайл); Результат.Вставить("Лист", ExcelФайл.Sheets(1)); Исключение Результат = Неопределено; #Если Клиент Тогда Сообщить("Ошибка создания обьекта Microsoft Excel" + ОписаниеОшибки()); #КонецЕсли КонецПопытки; Возврат Результат; КонецФункции Затем выполняется следующая процедура: Процедура Попытка ОбъектExcel = Результат; ОбъектExcel.Excel.DisplayAlerts = 0; ОбъектExcel.ExcelФайл.Close(); ОбъектExcel.Excel.DisplayAlerts = 1; ОбъектExcel.Excel.Quit(); ОбъектExcel.Excel = Неопределено; Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецПроцедуры В Исключение не заходит, ошибка закрытия файла Excel вылетает на строке ОбъектExcel.Excel.Quit(); В чем может быть дело? |
|||
1
Botanik
08.10.12
✎
16:51
|
Для каждого Файлик Из МассивФайлов Цикл
Если ВыборПапки Тогда ВременныйПуть = Файлик.ПолноеИмя; ЭлементыФормы.Надпись5.Заголовок = Файлик.Имя; ЭлементыФормы.Надпись4.Заголовок = "Сейчас обрабатывается файл:"; Иначе ВременныйПуть = Файлик; ЭлементыФормы.Надпись4.Заголовок = ""; КонецЕсли; Попытка Excel = Новый COMОбъект("Excel.Application"); Excel.WorkBooks.Open(ВременныйПуть); Состояние("Обработка файла Microsoft Excel..."); ExcelЛист = Excel.Sheets(1); Исключение Сообщить("Ошибка, не установлен Microsoft Excel"); Возврат; КонецПопытки; ActiveCell = Excel.ActiveCell.SpecialCells(xlLastCell); RowCount = ActiveCell.Row; ColumnCount = ActiveCell.Column; прерывалка = 0; ЭлементыФормы.прерывалка.МаксимальноеЗначение = RowCount; Для НомерСтроки = пСтрока По RowCount Цикл Контрагент = ExcelЛист.Cells(НомерСтроки, 2).Value; Договор = ExcelЛист.Cells(НомерСтроки, 3).Value; Валюта = ExcelЛист.Cells(НомерСтроки, 4).Value; Организация = ExcelЛист.Cells(НомерСтроки, 5).Value; НомерПриложения = ExcelЛист.Cells(НомерСтроки, 6).Value; АдресДоставки = ExcelЛист.Cells(НомерСтроки, 7).Value; КомментарийСтатуса = ExcelЛист.Cells(НомерСтроки, 8).Value; Ориентир = ExcelЛист.Cells(НомерСтроки, 9).Value; Вывеска = ExcelЛист.Cells(НомерСтроки, 10).Value; Дни = ExcelЛист.Cells(НомерСтроки, 11).Value; Интервал = ExcelЛист.Cells(НомерСтроки, 12).Value; ПорядокДоставки = ExcelЛист.Cells(НомерСтроки, 13).Value; КодСчета1С = ExcelЛист.Cells(НомерСтроки, 14).Value; СпецификацияС = ExcelЛист.Cells(НомерСтроки, 15).Value; СпецификацияПО = ExcelЛист.Cells(НомерСтроки, 16).Value; ВыставлениеСчетовС = ExcelЛист.Cells(НомерСтроки, 17).Value; ПериодСчета = ExcelЛист.Cells(НомерСтроки, 18).Value; Ковер = ExcelЛист.Cells(НомерСтроки, 19).Value; КоличествоКовров = ExcelЛист.Cells(НомерСтроки, 20).Value; СуммаЗа28ДнейИзФайла= ExcelЛист.Cells(НомерСтроки, 21).Value; ВидОграничения = ExcelЛист.Cells(НомерСтроки, 23).Value; ЧислоОграничения = ExcelЛист.Cells(НомерСтроки, 24).Value; ВидОплаты = ExcelЛист.Cells(НомерСтроки, 25).Value; ПричинаСоздания = ExcelЛист.Cells(НомерСтроки, 26).Value; Прайс = ExcelЛист.Cells(НомерСтроки, 27).Value; ПериодРасчета = ExcelЛист.Cells(НомерСтроки, 28).Value; Кассир = ExcelЛист.Cells(НомерСтроки, 29).Value; Маршрут = ExcelЛист.Cells(НомерСтроки, 30).Value; ДоставкаСчетаК = ExcelЛист.Cells(НомерСтроки, 31).Value; ДоставкаСчетаМ = ExcelЛист.Cells(НомерСтроки, 32).Value; Менеджер = ExcelЛист.Cells(НомерСтроки, 33).Value; КодКарточкиКлиента = ExcelЛист.Cells(НомерСтроки, 34).Value; // // пустая строка - конец файла близок Если НЕ ЗначениеЗаполнено(Контрагент) Тогда Продолжить; КонецЕсли; НовСтрока = ТабДанных.Добавить(); НовСтрока.Контрагент = СтрЗаменить(СокрЛП(Контрагент), Символ(160), ""); НовСтрока.Договор = СтрЗаменить(СокрЛП(Договор), Символ(160), ""); НовСтрока.Валюта = СтрЗаменить(СокрЛП(Валюта), Символ(160), ""); НовСтрока.Организация = СтрЗаменить(СокрЛП(Организация), Символ(160), ""); НовСтрока.НомерПриложения = СтрЗаменить(СокрЛП(НомерПриложения), Символ(160), ""); НовСтрока.АдресДоставки = СтрЗаменить(СокрЛП(АдресДоставки), Символ(160), ""); НовСтрока.КомментарийСтатуса = СтрЗаменить(СокрЛП(КомментарийСтатуса), Символ(160), ""); НовСтрока.Ориентир = СтрЗаменить(СокрЛП(Ориентир), Символ(160), ""); НовСтрока.Вывеска = СтрЗаменить(СокрЛП(Вывеска), Символ(160), ""); НовСтрока.Дни = СтрЗаменить(СокрЛП(Дни), Символ(160), ""); НовСтрока.Интервал = СтрЗаменить(СокрЛП(Интервал), Символ(160), ""); НовСтрока.ПорядокДоставки = СтрЗаменить(СокрЛП(ПорядокДоставки), Символ(160), ""); Попытка НовСтрока.КодСчета1С = Число(СтрЗаменить(СокрЛП(КодСчета1С), Символ(160), "")); Исключение НовСтрокаКодСчета1С = 0; КонецПопытки; Попытка НовСтрока.СпецификацияС = Дата(СтрЗаменить(СокрЛП(СпецификацияС), Символ(160), "")); Исключение НовСтрока.СпецификацияС = СтрЗаменить(СокрЛП(СпецификацияС), Символ(160), ""); КонецПопытки; Попытка НовСтрока.СпецификацияПО = Дата(СтрЗаменить(СокрЛП(СпецификацияПО), Символ(160), "")); Исключение НовСтрока.СпецификацияПО = СтрЗаменить(СокрЛП(СпецификацияПО), Символ(160), ""); КонецПопытки; Попытка НовСтрока.ВыставлениеСчетовС = Дата(СтрЗаменить(СокрЛП(ВыставлениеСчетовС), Символ(160), "")); Исключение НовСтрока.ВыставлениеСчетовС = СтрЗаменить(СокрЛП(ВыставлениеСчетовС), Символ(160), ""); КонецПопытки; НовСтрока.КодКарточкиКлиента = СтрЗаменить(СокрЛП(КодКарточкиКлиента), Символ(160), ""); НовСтрока.Ковер = СтрЗаменить(СокрЛП(Ковер), Символ(160), ""); НовСтрока.ПериодСчета = СтрЗаменить(СокрЛП(ПериодСчета), Символ(160), ""); НовСтрока.КоличествоКовров = СтрЗаменить(СокрЛП(КоличествоКовров), Символ(160), ""); НовСтрока.ПериодРасчета = СтрЗаменить(СокрЛП(ПериодРасчета), Символ(160), ""); НовСтрока.ВидОплаты = СтрЗаменить(СокрЛП(ВидОплаты), Символ(160), ""); НовСтрока.ПричинаСоздания = СтрЗаменить(СокрЛП(ПричинаСоздания), Символ(160), ""); НовСтрока.Прайс = СтрЗаменить(СокрЛП(Прайс), Символ(160), ""); НовСтрока.СуммаЗа28ДнейИзФайла = СтрЗаменить(СокрЛП(СуммаЗа28ДнейИзФайла), Символ(160), ""); НовСтрока.Кассир = СтрЗаменить(СокрЛП(Кассир), Символ(160), ""); НовСтрока.Маршрут = СтрЗаменить(СокрЛП(Маршрут), Символ(160), ""); НовСтрока.ДоставкаСчетаК = СтрЗаменить(СокрЛП(ДоставкаСчетаК), Символ(160), ""); НовСтрока.ДоставкаСчетаМ = СтрЗаменить(СокрЛП(ДоставкаСчетаМ), Символ(160), ""); НовСтрока.Менеджер = СтрЗаменить(СокрЛП(Менеджер), Символ(160), ""); НовСтрока.ВидОграничения = СтрЗаменить(СокрЛП(ВидОграничения), Символ(160), ""); НовСтрока.ЧислоОграничения = СтрЗаменить(СокрЛП(ЧислоОграничения), Символ(160), ""); прерывалка = прерывалка + 1; //Если прерывалка > 100 Тогда Прервать; КонецЕсли; КонецЦикла; Excel.Application.Quit(); Excel = Неопределено; |
|||
2
Botanik
08.10.12
✎
16:52
|
Там дофига, но код рабочий, делай по аналогии.
|
|||
3
akcent25
08.10.12
✎
16:53
|
(1) Спасибо, сейчас попробую.
|
|||
4
akcent25
08.10.12
✎
17:04
|
(1) не помогло....код который в (0) тоже рабочий, судя по http://infostart.ru/public/57401/ и на мисте есть пример такого кода, но хз почему в моем случае не работает.
|
|||
5
akcent25
08.10.12
✎
17:20
|
Help! Неужели никаких мыслей на этот счет?
|
|||
6
zladenuw
08.10.12
✎
17:29
|
BaseOLE.Excel.Quit();
|
|||
7
DJ Anthon
08.10.12
✎
17:30
|
тоже такое было. там какой-то еще был параметр, кроме DisplayAlerts. поколупай примеры в инете, где-то должен был всплыть. у меня это еще до 1С было, очень давно
|
|||
8
akcent25
08.10.12
✎
17:32
|
Здесь у меня тож самое:
Результат = Новый Структура(); BaseOLE = Новый COMОбъект("Excel.Application"); Результат.Вставить("EXCEL", BaseOLE); .................. Результат.Excel.Quit(); Не работает, вылетает ошибка Excel и файл не закрывается. |
|||
9
akcent25
08.10.12
✎
17:34
|
(7) у остальных Результат.Excel.Quit() прокатывает, от версии Excel что ли зависит, у меня 2010.
|
|||
10
zladenuw
08.10.12
✎
17:36
|
в попытку и смотри описание ошибки
|
|||
11
akcent25
08.10.12
✎
17:45
|
(10)У меня это в попытке выполняется, в исключение не заходит отладчик, вылетает сразу после Excel.Quit()
|
|||
12
zladenuw
08.10.12
✎
17:46
|
(10) внимательно читай! добавить в исключение СОобщить(ОписаниеОшибки())
|
|||
13
DJ Anthon
08.10.12
✎
17:55
|
(12) олешке обычно пофигу на эти исключения
|
|||
14
akcent25
08.10.12
✎
18:10
|
(13) реально по фиг, он свою ошибку выдает Microsoft Excel приложение будет закрыто. Жутко извиняемся)).
|
|||
15
zladenuw
08.10.12
✎
18:17
|
||||
16
DJ Anthon
08.10.12
✎
18:32
|
(14) обновы все накатил?
|
|||
17
akcent25
08.10.12
✎
18:40
|
(15) Я чуть не подпрыгнул от радости что оно закрылось без ошибок....но спустя 2 сек вылезла таже ошибка! Жуть какая то.
(16) ты про обновы 1с? платформа 8.2.15.294. |
|||
18
akcent25
08.10.12
✎
18:48
|
Сам файл то нормально закрывается, как положено, вот думаю может у винды настроить запрет на вывод сообщений об ошибках, тоже вариант))
|
|||
19
Aprobator
08.10.12
✎
18:50
|
BaseOLE.Quit()
|
|||
20
akcent25
08.10.12
✎
18:52
|
(19)Пробовал уже)) не катит.
|
|||
21
DJ Anthon
08.10.12
✎
18:53
|
(17) офиса, ессно. ну и винды
|
|||
22
DJ Anthon
08.10.12
✎
18:53
|
попробуй другую платформу, не 1С. си, например. ;))) другую тачку пробовал?
|
|||
23
akcent25
08.10.12
✎
18:59
|
(22)ага, сейчас на си попробую)).
(21) я что то не в курсе какие у заказчика обновы установлены. Если ничего не поможет, начну разные варианты пробовать. |
|||
24
vmv
08.10.12
✎
19:28
|
Excel.Application надо сначала крыть - ехсель-книги там или шо за чушь через ехзит(), я на попытки ставлю когда глючит
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |