|
Не получается убить процесс Excel из 1С | ☑ | ||
---|---|---|---|---|
0
marshalbratsk
23.10.17
✎
04:24
|
Не получается убить процесс из 1С. Перепробовал уже всякие способы, инфа, которую находил не помогает. Кажется, что проблема в том, что файл создаётся новый, сохраняется через SaveAs и поэтому может быть не удаляется.
Код: Эксель = Новый COMОбъект("Excel.Application"); Книга = Эксель.WorkBooks.Add(); Лист = Книга.WorkSheets(1); // Лист = Книга.Sheets.Add(); КоличествоКолонок = ТаблицаРезультата.Колонки.Количество(); КоличествоСтрок = ТаблицаРезультата.Количество(); Для Инд=1 по КоличествоКолонок Цикл Лист.Cells(1, Инд).Value = ТаблицаРезультата.Колонки[Инд-1].Заголовок; КонецЦикла; МассивКом = Новый COMSafeArray("VT_VARIANT",КоличествоКолонок,КоличествоСтрок); Для индСтрок = 0 по КоличествоСтрок - 1 Цикл СтрокаТаблицы = ТаблицаРезультата[индСтрок]; Для индКолонок = 0 по КоличествоКолонок - 1 Цикл МассивКом.SetValue(индКолонок, индСтрок, ?(ТипЗнч(СтрокаТаблицы[индКолонок])=Тип("Дата"),Строка(СтрокаТаблицы[индКолонок]),СтрокаТаблицы[индКолонок])); КонецЦикла; КонецЦикла; КонецДиапазона=КоличествоСтрок+1; Лист.Range(Лист.Cells(2,1), Лист.Cells(КонецДиапазона,КоличествоКолонок)).Value = МассивКом; Лист.Rows("2:"+Формат(КонецДиапазона, "ЧГ=")).RowHeight = 12; Попытка Книга.SaveAs(Путь_SRC_OUT_PAYMENT); Исключение Сообщить(ОписаниеОшибки()+" Файл не сохранен!"); КонецПопытки; Книга.Save(); Эксель.DisplayAlerts = 0; Эксель.ActiveWorkbook.Close(1); // Эксель.Application.Quit(); Эксель.Quit(); Эксель = 0; |
|||
1
marshalbratsk
23.10.17
✎
06:02
|
Путь:
Путь_SRC_OUT_PAYMENT = "C:\SRC_OUT_PAYMENT_"+Формат(Период, "ДФ=dd_MM_yyyy_HH_mm")+".xls"; |
|||
2
marshalbratsk
23.10.17
✎
06:31
|
Почему-то процесс не уходил до возврата функции. Не могу понять в чём причина. В итоге процесс ушёл, использовал следующую конструкцию
Эксель.DisplayAlerts = 0; Эксель.Application.Quit(); Эксель = Неопределено; |
|||
3
Масянька
23.10.17
✎
08:28
|
(0)
Книга.Close(); - закрывает текущий файл. Эксель.Quit(); - закрывает приложение. |
|||
4
v77
23.10.17
✎
09:17
|
Может так попробовать?
Лист = Неопределено; Книга = Неопределено; Эксель.Application.Quit(); Эксель = Неопределено; |
|||
5
vde69
23.10.17
✎
09:22
|
http://catalog.mista.ru/public/57401/
// функция устанавливает связь с EXCEL // в качестве параметра требуется имя открываемого файла // в случае удачи возвращает соответствие из обьектов ОЛЕ, в случае не удачи - неопределено Функция EXCELУстановитьСвязь (ИмяФайла)Экспорт Результат = Неопределено; #Если Клиент Тогда Состояние("Идет установка связи, ждите....."); #КонецЕсли Попытка Результат = Новый Соответствие(); BaseOLE = Новый COMОбъект("Excel.Application"); Результат.Вставить("EXCEL", BaseOLE); ExcelФайл = BaseOLE.WorkBooks.Open (ИмяФайла); Результат.Вставить("ExcelФайл", ExcelФайл); МассивЛистов = Новый Массив(); КоличествоЛистов = ExcelФайл.Sheets.Count; Для е = 1 по КоличествоЛистов Цикл МассивЛистов.Добавить(ExcelФайл.Sheets(е)); КонецЦикла; Результат.Вставить("Листы", МассивЛистов); Исключение Результат = Неопределено; #Если Клиент Тогда Сообщить("Ошибка создания обьекта Microsoft Excel" + ОписаниеОшибки()); #КонецЕсли КонецПопытки; Возврат Результат; КонецФункции // функция разрывает связь с 1с 7.7 // в качестве параметра требуеться структура созданая при установке соединения Процедура EXCELРазорватьСвязь (Соответстие) Экспорт Попытка Соответстие["EXCEL"].DisplayAlerts = 0; Соответстие["ExcelФайл"].Close(); Соответстие["EXCEL"].DisplayAlerts = 1; Соответстие["EXCEL"].Quit(); Соответстие["EXCEL"] = Неопределено; Исключение #Если Клиент Тогда Сообщить(ОписаниеОшибки()); #КонецЕсли КонецПопытки; КонецПроцедуры // функция получает данные ячейки и возвращаеть структуру соответствий, или неопределено в случае неудачи // // В любом случае возвращаем соостветствие "Значение" и "ЭтоФормула", остальное по флагам // Функция EXCELПолучитьЗначениеЯчейки (ExcelЛист, НомерСтроки, НомерКолонки, ПолучатьТекстФормулы = ложь, ПолучатьОформление = ложь) Результат = Новый Соответствие(); Попытка ТекущееЗначениеФормулы = ExcelЛист.Cells(НомерСтроки, НомерКолонки).Formula; Если ТекущееЗначениеФормулы <> "" Тогда Если Лев(ТекущееЗначениеФормулы, 1) <> "=" Тогда Результат.Вставить("ЭтоФормула", Ложь); Результат.Вставить("ЗначениеЯчейки", ExcelЛист.Cells(НомерСтроки, НомерКолонки).value); Иначе Результат.Вставить("ЭтоФормула", Истина); Если Лев(СокрЛП(ExcelЛист.Cells(НомерСтроки, НомерКолонки).text),1) = "#" Тогда Результат.Вставить("ЗначениеЯчейки", Неопределено); Иначе Результат.Вставить("ЗначениеЯчейки", ExcelЛист.Cells(НомерСтроки, НомерКолонки).value); КонецЕсли; Если ПолучатьТекстФормулы Тогда Результат.Вставить("ТекстФормулы", СокрЛП(ТекущееЗначениеФормулы)); КонецЕсли; КонецЕсли; Иначе Результат.Вставить("ЭтоФормула", Ложь); Результат.Вставить("ЗначениеЯчейки", ExcelЛист.Cells(НомерСтроки, НомерКолонки).value); КонецЕсли; Если ПолучатьОформление Тогда Результат.Вставить("ЦветЯчейки", СокрЛП(ExcelЛист.Cells(НомерСтроки, НомерКолонки).Interior.ColorIndex)); // здесь можно добавить и другие.... КонецЕсли; Исключение Результат = Неопределено; КонецПопытки; Возврат Результат; КонецФункции // функция получает данные ячейки и значение // // В любом случае возвращаем соостветствие "Значение" и "ЭтоФормула", остальное по флагам // Функция EXCELПолучитьЗначениеЯчейки2 (ExcelЛист, НомерСтроки, НомерКолонки) Результат = EXCELПолучитьЗначениеЯчейки (ExcelЛист, НомерСтроки, НомерКолонки); Если Результат = Неопределено Тогда Возврат Неопределено; КонецЕсли; Возврат Результат["ЗначениеЯчейки"]; КонецФункции // // пример использования: // // будем подключаться СоответстиеЗагрузки = EXCELУстановитьСвязь (ТекущийФайл.ПолноеИмя); Если СоответстиеЗагрузки = Неопределено тогда Возврат; КонецЕсли; Для каждого ТекущаяСтраница из СоответстиеЗагрузки["Листы"] Цикл ЗначениеX1Y1 = EXCELПолучитьЗначениеЯчейки2 (ТекущаяСтраница, 1, 1); КонецЦикла; // теперь отключаемся... EXCEL_РазорватьСвязь (СоответстиеЗагрузки); |
|||
6
Fedor-1971
23.10.17
✎
09:22
|
(0) вот это: Книга.Save(); - оставит вопрос "Записать(перезаписать): да / нет?" - и все попытки закрыть эксель ни к чему не приведут.
По памяти: Книга.Save(1); т.е. записывать без вопросов, почитай в инете какие параметры у записи есть |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |