Имя: Пароль:
1C
1С v8
Не завершается процесс Excel. Остается висеть. Почему ?
,
0 lim9
 
25.07.16
10:54
Попытка
    Эксель = Новый COMОбъект("Excel.Application");
    ПолноеИмяФайла="D:\test.xls";
    Книга = Эксель.WorkBooks.Open(ПолноеИмяФайла); // Ошибка здесь !
    Лист = Книга.ActiveSheet();
    RangeAll = Лист.UsedRange;
    ЧислоКолонок = RangeAll.Columns.Count;
    ЧислоСтрок = RangeAll.Rows.Count;    
    Для с = ПерваяСтрока По ПоследняяСтрока Цикл
        Код = Лист.Cells(с, 1).Value;
    КонецЦикла;
    //закроем Эксель
    //Эксель.ActiveWorkbook.Save();
    Эксель.WorkBooks.close();
    Эксель.Application.Quit();
    Эксель.Quit();
    Лист = неопределено;                    
    Книга = неопределено;
    Эксель = неопределено;
Исключение
    Сообщить(ОписаниеОшибки());    
КонецПопытки;

Права все есть. Делаю на домашнем компе. Вручную файл открывается без проблем.
1 Timon1405
 
25.07.16
10:57
текст ошибки предлагается угадать?
2 Fedor-1971
 
25.07.16
10:58
(0) Эксель.WorkBooks.close(0); - закрыть без дурацких вопросов
3 Gary417
 
25.07.16
10:59
(0) в исключении надо дополнительно сделать

Эксель.Application.Quit();
Эксель.Quit();

иначе при возникновении ошибок загрузки логично что эксель  останется висеть
4 lim9
 
25.07.16
11:00
(1) - а самом деле ошибки нет, это старый комент
5 lim9
 
25.07.16
11:00
(2) (3) - так выполняется без ошибки!
А остается висеть все равно
6 lim9
 
25.07.16
11:01
Попытка
    Эксель = Новый COMОбъект("Excel.Application");
    ПолноеИмяФайла="D:\test.xls";
    Книга = Эксель.WorkBooks.Open(ПолноеИмяФайла);
    Лист = Книга.ActiveSheet();
    RangeAll = Лист.UsedRange;
    ЧислоКолонок = RangeAll.Columns.Count;
    ЧислоСтрок = RangeAll.Rows.Count;    
    Для с = ПерваяСтрока По ПоследняяСтрока Цикл
        Код = Лист.Cells(с, 1).Value;
    КонецЦикла;
    //закроем Эксель
    //Эксель.ActiveWorkbook.Save();
    Эксель.WorkBooks.close();
    Эксель.Application.Quit();
    Эксель.Quit();
    Лист = неопределено;                    
    Книга = неопределено;
    Эксель = неопределено;
Исключение
    Сообщить(ОписаниеОшибки());    
    //закроем Эксель
    //Эксель.ActiveWorkbook.Save();
    Эксель.WorkBooks.close();
    Эксель.Application.Quit();
    Эксель.Quit();
    Лист = неопределено;                    
    Книга = неопределено;
    Эксель = неопределено;
КонецПопытки;

то же самое - остается висеть
7 vde69
 
25.07.16
11:02
http://catalog.mista.ru/public/57401/

Процедура EXCEL_РазорватьСвязь (Соответстие) Экспорт
    Попытка
        Соответстие["EXCEL"].DisplayAlerts = 0;
        Соответстие["ExcelФайл"].Close();
        Соответстие["EXCEL"].DisplayAlerts = 1;
        Соответстие["EXCEL"].Quit();
        Соответстие["EXCEL"] = Неопределено;
    Исключение
        #Если Клиент Тогда
            Сообщить(ОписаниеОшибки());
        #КонецЕсли
    КонецПопытки;                  
КонецПроцедуры
8 Fedor-1971
 
25.07.16
11:06
(6) блин, ты читать умеешь?
   Эксель.WorkBooks.close(); - где 0 в параметре как в (2)? В интерактивном режиме он тебя спрашивает "Точно хочешь закрыть?" (дальше много нецензурных слов)

    Эксель.Application.Quit(); - вот этим ты ему порвал шаблон, у тебя Эксель уже Application
    Эксель.Quit(); - ну а тут правильно закрыл

И перед экспериментами поснимай все задачи Экселя, для чистоты системы.
9 lim9
 
25.07.16
11:14
Попытка
    Эксель = Новый COMОбъект("Excel.Application");
    ПолноеИмяФайла="D:\test.xls";
    Книга = Эксель.WorkBooks.Open(ПолноеИмяФайла);
    Лист = Книга.ActiveSheet();
    RangeAll = Лист.UsedRange;
    ЧислоКолонок = RangeAll.Columns.Count;
    ЧислоСтрок = RangeAll.Rows.Count;    
    Для с = ПерваяСтрока По ПоследняяСтрока Цикл
        Код = Лист.Cells(с, 1).Value;
    КонецЦикла;
    //закроем Эксель
    //Эксель.ActiveWorkbook.Save();
    Эксель.DisplayAlerts = 0;
    Книга.close(0);
    Эксель.DisplayAlerts = 1;
    Эксель.DisplayAlerts = 0;
    Эксель.WorkBooks.close(0);
    Эксель.DisplayAlerts = 1;
    Эксель.Application.Quit();
    Эксель.Quit();
    Лист = неопределено;                    
    Книга = неопределено;
    Эксель = неопределено;
Исключение
    Сообщить(ОписаниеОшибки());    
    //закроем Эксель
    //Эксель.ActiveWorkbook.Save();
    Эксель.DisplayAlerts = 0;
    Книга.close(0);
    Эксель.DisplayAlerts = 1;
    Эксель.DisplayAlerts = 0;
    Эксель.WorkBooks.close(0);
    Эксель.DisplayAlerts = 1;
    Эксель.Application.Quit();
    Эксель.Quit();
    Лист = неопределено;                    
    Книга = неопределено;
    Эксель = неопределено;
КонецПопытки;

- НЕ ПОМОГЛО.
Все процессы предварительно закончил
10 vde69
 
25.07.16
11:18
пробуй так:


Попытка
    Эксель = Новый COMОбъект("Excel.Application");
    ПолноеИмяФайла="D:\test.xls";
    Книга = Эксель.WorkBooks.Open(ПолноеИмяФайла);
    Лист = Книга.ActiveSheet();
    RangeAll = Лист.UsedRange;
    ЧислоКолонок = RangeAll.Columns.Count;
    ЧислоСтрок = RangeAll.Rows.Count;    
    Для с = ПерваяСтрока По ПоследняяСтрока Цикл
        Код = Лист.Cells(с, 1).Value;
    КонецЦикла;

    Лист = неопределено;                    

    Эксель.DisplayAlerts = 0;
    Книга.close(0);
    Эксель.DisplayAlerts = 1;
    Эксель.Quit();
    Эксель = неопределено;
Исключение
    Сообщить(ОписаниеОшибки());    
КонецПопытки;
11 Fedor-1971
 
25.07.16
11:19
(9) да уж, вот это:
    Эксель.DisplayAlerts = 0;
    Книга.close(0); - закрыл книгу
    Эксель.DisplayAlerts = 1;
    Эксель.DisplayAlerts = 0;
    Эксель.WorkBooks.close(0); - опять закрыл книгу
    Эксель.DisplayAlerts = 1;
    Эксель.Application.Quit(); - порвал шаблон Экселю
    Эксель.Quit(); - попытался закрыть оный

просто 5. Слов нет, буквы пока ещё есть.

Вот тебе счасце:
    Книга.close(0);
    Эксель.Quit();
Когда копипастишь код, хотя бы удосужься его понять.
12 vde69
 
25.07.16
11:20
(10) +

и перед пробой посмотри в процессах ексель, он может висеть без видимых форм - тогда прибей все процессы екселя перед пробой
13 vde69
 
25.07.16
11:21
(11) у него не закрывался так как "Лист" это COM который нужно убить раньше всего....
14 lim9
 
25.07.16
11:21
(11) - а так сделал потому как уже блин задолбался
(12) - все убил! написал в (9)
15 vde69
 
25.07.16
11:22
и еще занули "RangeAll" перед листом !!!!!!
16 vde69
 
25.07.16
11:24
Попытка
    Эксель = Новый COMОбъект("Excel.Application");
    ПолноеИмяФайла="D:\test.xls";
    Книга = Эксель.WorkBooks.Open(ПолноеИмяФайла);
    Лист = Книга.ActiveSheet();
    RangeAll = Лист.UsedRange;
    ЧислоКолонок = RangeAll.Columns.Count;
    ЧислоСтрок = RangeAll.Rows.Count;    
    Для с = ПерваяСтрока По ПоследняяСтрока Цикл
        Код = Лист.Cells(с, 1).Value;
    КонецЦикла;

    // порядок прибития переменных хранящих COM важен !!!

    RangeAll = неопределено;
    Лист = неопределено;                    

    Эксель.DisplayAlerts = 0;
    Книга.close(0);
    Эксель.DisplayAlerts = 1;
    Эксель.Quit();
    Эксель = неопределено;
Исключение
    Сообщить(ОписаниеОшибки());    
КонецПопытки;
17 lim9
 
25.07.16
11:24
Сделал как в (11) :

Книга.close(0);
Эксель.Quit();

- не помогло!

(10) - тоже делал - ничего не изменилось.
18 Fedor-1971
 
25.07.16
11:28
(17) перезагрузи комп
(13) обычно, достаточно закрыть книгу, Лист - это просто переменная, СОМ - Эксель, при открытой книге не завершается.
19 lim9
 
25.07.16
11:32
помогла перезагрузка! Всем спасибо!
..... блиин такая тупость ваще