Открываю Excel, считываю... на Close() зависает...

Пробовал убрать Close().
Все работает, но в процессах зависает Excel...

Может кто сталкивался ?

```1c
    Excel = Новый COMОбъект("Excel.Application");
    Excel.WorkBooks.Open(ИмяФайла);

    ....
    Excel.WorkBooks.Close();
```
---
Попробуйте

Excel.DisplayAlerts = 0;

сразу после создания объекта.
---
обычно эта проблема возникает при Application.Visible = .F. а в экселе открыто окно диалога
хотя конечно причин может быть 100500
так вот возможно достаточно указать екселю, что файл нужно закрыть без сохранения
---
экселе открыто окно диалога - скорее всего... И как это закрыть, не показывая пользователю ?
---
лучше его сразу readonly открывать,
---
попробовал ... не помогло...
---
Ексель.Application.Quit();

Или в худшем случае можно и taskkill использовать
---
taskkill использовать а почему не сразу Ctrl+Alt+Del
---
лучше его сразу readonly открывать, и чтобы не пытался внешние ссылки ресольвить: Excel.Workbooks.Open(Путь, 2, True);
а то спрашивает всякое ненужное
ну и да, .Visible = True - это по любому, а то заколебёшься потом задачи снимать. А так хоть пользователь сам сможет его прикрыть.
---
А можно и через ADO читать. Это про XLS (97-2003).

```1c
    Функция ПолучитьКоннектExcel( пИмяФайла, пВызватьИсключение = Ложь ) Экспорт

    лРез = Новый COMОбъект("ADODB.Connection");
    СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source = " + пИмяФайла +
    "; Extended Properties = " + ""Excel 8.0"+";HDR=NO;IMEX=1";";

    //подключение к источнику данных
    Попытка
    лРез.Open(СтрокаПодключения);
    Возврат лРез;
    Исключение
    Если пВызватьИсключение Тогда
    лТекстОшибки = ОписаниеОшибки();
    лФайл = Новый Файл( пИмяФайла );
    Если ВРег( лФайл.Расширение )=".XLSX" Тогда
    лТекстОшибки = лТекстОшибки + Символы.ПС + "Сохраните загружаемый файл в формате MS Excel 97-2003 (*.XLS) и попробуйте выполнить загрузку снова.";
    КонецЕсли;
    ВызватьИсключение( лТекстОшибки );
    Иначе
    Возврат Неопределено;
    КонецЕсли;
    КонецПопытки;

    КонецФункции

    // функция возвращает список значений листов книги Excel
    // на входе передается коннект к файлу (см. ПолучитьКоннектExcel)
    Функция ПолучитьСписокЛистов( пКоннект ) Экспорт

    лСписок = Новый СписокЗначений;
    лКаталог = Новый COMОбъект("ADOX.Catalog");
    лКаталог.ActiveConnection = пКоннект;

    Для Каждого лЛист ИЗ лКаталог.Tables Цикл
    лСписок.Добавить( лЛист, Лев( лЛист.Name, СтрДлина( лЛист.Name ) - 1 ) );
    КонецЦикла;

    Возврат лСписок;

    КонецФункции

    Функция ПолучитьДанныеЛиста( пКоннект, пЛист ) Экспорт

    лКоманда = Новый COMОбъект("ADODB.Command");
    лКоманда.ActiveConnection = пКоннект;

    лКоманда.CommandText = "SEL ECT * FR OM ["+ пЛист.Name + "]";
    лКоманда.CommandType = 1;
    лНаборДанных = Новый COMОбъект("ADODB.RecordSet");
    лНаборДанных = лКоманда.Execute();
    лНаборДанных.MoveFirst();

    Возврат лНаборДанных;

    КонецФункции

    Процедура ПерейтиКСтроке( пНаборДанных, пНомерСтроки ) Экспорт

    пНаборДанных.MoveFirst();
    Для лНомерСтр = 1 По пНомерСтроки - 1 Цикл
    пНаборДанных.MoveNext();
    КонецЦикла;

    КонецПроцедуры

    Процедура ПерейтиКСледующейСтроке( пНаборДанных ) Экспорт
    пНаборДанных.MoveNext();
    КонецПроцедуры

    Функция ДостигнутКонецНабора( пНаборДанных ) Экспорт
    Возврат пНаборДанных.EOF <> 0;
    КонецФункции

    // функция возвращает соответствие с данными строки
    Функция ПолучитьДанныеСтроки( пНаборДанных ) Экспорт

    лРез = Новый Соответствие;

    Для Каждого лПоле из пНаборДанных.fields цикл
    лРез.Вставить( лПоле, лПоле.value );
    КонецЦикла;

    Возврат лРез;

    КонецФункции

    Функция ПолучитьПоляЛиста( пНаборДанных ) Экспорт

    лРез = Новый Массив;
    Для Каждого лПоле из пНаборДанных.fields цикл
    лРез.Добавить( лПоле );
    КонецЦикла;

    Возврат лРез;

    КонецФункции
```

XLSX - через XML можно прочитать. Из БСП копировал себе такой код, обработка ЗагрузкаДанныхИзФайла
---
Может проблема в эксель быть.
---
Можно попробовать.

```1c
    Попытка
    Excel = Новый COMОбъект("Excel.Application");
    Excel.WorkBooks.Open(Файл);
    Состояние("Обработка файла Microsoft Excel...");
    Исключение
    Сообщить("Ошибка при открытии файла с помощью Exel!Загрузка не будет произведена!");
    Сообщить(ОписаниеОшибки());
    Возврат;
    КонецПопытки;

    ....
```

Excel.Quit();
---
Excel.Quit() не работает
---
```1c
    Excel = Undefined;
```
---
не помогает
---
с другой стороны, один зависший процесс сильно не помешает...
---
Если не помогает ... Excel = Неопределено; Тогда как вариант, - проверьте не установлены ли в эксель файле фильтры по колонке ?! Юзеры любят ставить фильтры )
---
фильтров нет.

Но мне не понятно, что делает эксель...
только открыл файл, ничего не делал и уже при закрытии предлагает сохранить изменения ...
---
закрывать без сохранения пробовал?
---
вручную - да.

программно надо
---
Попробуйте

Excel.DisplayAlerts = 0;

сразу после создания объекта.
---
благодарю. Помогло.
---
Помогло
Excel.DisplayAlerts = 0;
На новых версиях Excel после закрытия файла, постоянно отображался вопрос "Сохранить изменения?", а изменений - не было