Имя: Пароль:
1C
 
Закрыть Excel программно
,
0 LeoKeyn
 
07.12.17
14:08
Всем здравствуйте. Никак не могу понять как закрыть Excel без сохранения изменений после того, как закончил работать с данными.
Открываю его так

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

Закрывать как только не пробовал

БД .DisplayAlerts = 0;
БД .Quit();

просто

БД .Quit();

И так

БД .Application.Quit();

Подскажите что не так то делаю?
1 Гипервизор
 
07.12.17
14:24
Excel.Quit();
2 Сияющий в темноте
 
07.12.17
14:28
(1) Перед этим, только, желательно проверить, что другие файлы пользователя в этом Excel не открыты.
3 Tatitutu
 
07.12.17
14:37
//закрывает активную книгу
Excel.ActiveWorkbook.Close();
4 LeoKeyn
 
07.12.17
14:44
(1) (3) Не работает

{ВнешняяОбработка.ПерегрузкаDBF.Форма.Форма.Форма(192)}: Значение не является значением объектного типа (Quit)
      Excel.Quit();
5 LeoKeyn
 
07.12.17
14:44
На (3)  выдает тоже самое как и (4)
6 Гипервизор
 
07.12.17
14:48
Excel = Новый COMОбъект("Excel.Application");
Excel.Quit();

Вот прям так сразу и вместе отрабатывает?
Либо в имени ошиблись, либо из разных мест вызываете. "Возврат БД" как бы намекает, что из процедуры где инициализируете Excel вы уходите. Тогда откуда пытаетесь вызвать закрытие?
7 Сияющий в темноте
 
07.12.17
15:03
(6) Они ссылку на Excel потеряли в процессе работы, а получить её через Application из книги не додумались.
8 LeoKeyn
 
07.12.17
15:10
Приведу полностью может так лучше будет, так как у меня что то не выходит понять

Функция открытия

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


Обработка

&НаКлиенте
Процедура ОбработкаИзEXCEL()
    
    БДНачальная = ОткрытиеEXCEL();
    БДКонечная = СозданиеDBF();
    КоличествоЛистов = БДНачальная.Sheets.Count;
    
    Для НомерЛиста = 1 ПО КоличествоЛистов Цикл
        Лист = БДНачальная.WorkSheets(НомерЛиста);
        ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;
        
        Для Строка = 1 ПО ВсегоСтрок Цикл
            Если ПроверкаСодержанияСтроки(Лист.Cells(Строка, 1).Value) = Истина Тогда
                
                Лист.Cells(Строка, 3).Value = СтрЗаменить(Лист.Cells(Строка, 3).Value,Символы.ПС ," ");
                Лист.Cells(Строка, 3).Value = СтрЗаменить(Лист.Cells(Строка, 3).Value,Символы.ВК ," ");
                Лист.Cells(Строка, 3).Value = СтрЗаменить(Лист.Cells(Строка, 3).Value,"№" ," № ");
                Лист.Cells(Строка, 3).Value = СтрЗаменить(Лист.Cells(Строка, 3).Value,"г." ," г.");
                Лист.Cells(Строка, 3).Value = СтрЗаменить(Лист.Cells(Строка, 3).Value,"г ." ," г.");
                Лист.Cells(Строка, 3).Value = СтрЗаменить(Лист.Cells(Строка, 3).Value,"  "," ");
                Лист.Cells(Строка, 3).Value = СокрЛП(Лист.Cells(Строка, 3).Value);
                ЗапомнитьКоммент = Лист.Cells(Строка, 3).Value;
                //БДКонечная.Добавить();
                //БДКонечная.COMMENT = "VID_DOC 0 - не известно, 1 - судебное решение; 2 - погашение; 3 - отмена судебного решения; 4 - формирование иска.";
                //БДКонечная.Записать();
                
                
                
                БДКонечная.Добавить();
                БДКонечная.COMMENT = ЗапомнитьКоммент;
                БДКонечная.Z_DOC = ОбработатьСтроку(Лист.Cells(Строка, 3).Value,"Z_DOC");
                Если СтрЧислоВхождений(Лист.Cells(Строка, 5).Value, "ОСР") > 0 Тогда
                    БДКонечная.VID_DOC = 3;
                ИначеЕсли СтрЧислоВхождений(Лист.Cells(Строка, 6).Value, "-") > 0 Тогда
                    БДКонечная.VID_DOC = 1;
                ИначеЕсли СтрЧислоВхождений(Лист.Cells(Строка, 5).Value, "-") > 0 Тогда
                    БДКонечная.VID_DOC = 2;
                Иначе
                    БДКонечная.VID_DOC = 0;
                КонецЕсли;
                
                БДКонечная.OPER_NUMB = Лист.Cells(Строка, 1).Value;
                ДатаНомер = Лист.Cells(Строка, 2).Value;
                БДКонечная.DATE = ОбработатьСтроку(Лист.Cells(Строка, 2).Value,"SUD_DATE");
                БДКонечная.DOCUMENT = СокрЛП(СтрЗаменить(ДатаНомер, Лев(Строка(БДКонечная.DATE), 10), ""));
                БДКонечная.MISTK = ОбработатьСтроку(Лист.Cells(Строка, 3).Value,"MISTK");
                
                Если СтрЗаменить(БДКонечная.MISTK," ","") = "" Тогда
                    БДКонечная.SUD_DOC = ОбработатьСтроку(Лист.Cells(Строка, 3).Value,"SUD_DOC");
                    
                КонецЕсли;
                БДКонечная.LT = ОбработатьСтроку(Лист.Cells(Строка, 3).Value,"LT");
                Если НЕ СтрЗаменить(БДКонечная.SUD_DOC," ","") = "" Тогда
                    
                    БДКонечная.SUD_DATE = ОбработатьСтроку(Лист.Cells(Строка, 3).Value,"SUD_DATE",БДКонечная.VID_DOC);
                КонецЕсли;
                
                
                
                
                БДКонечная.PAI_NUMB = ОбработатьСтроку(БДНачальная.Sheets(НомерЛиста).Name,"PAI_NUMB");
                
                
                Если СтрЧислоВхождений(Лист.Cells(Строка, 5).Value, "-") > 0 Тогда
                    БДКонечная.DEBIT = Лист.Cells(Строка, 4).Value;
                ИначеЕсли СтрЧислоВхождений(Лист.Cells(Строка, 5).Value, "-") = 0 И СтрЗаменить(Лист.Cells(Строка, 5).Value," ","") <> 0 Тогда
                    БДКонечная.DEBIT = "76/СРШ";
                КонецЕсли;
                
                Если СтрЧислоВхождений(Лист.Cells(Строка, 6).Value, "-") > 0 Тогда
                    БДКонечная.CREDIT = Лист.Cells(Строка, 4).Value;
                ИначеЕсли СтрЧислоВхождений(Лист.Cells(Строка, 6).Value, "-") = 0 И СтрЗаменить(Лист.Cells(Строка, 6).Value," ","") <> 0 Тогда
                    БДКонечная.CREDIT = "76/СРШ";
                КонецЕсли;
                
                Если СтрЧислоВхождений(БДКонечная.CREDIT, "76/СРШ") > 0 Тогда
                БДКонечная.SUM = Лист.Cells(Строка, 6).Value;
                ИначеЕсли СтрЧислоВхождений(БДКонечная.DEBIT, "76/СРШ") > 0 Тогда
                БДКонечная.SUM = Лист.Cells(Строка, 5).Value;
                КонецЕсли;
                БДКонечная.VALUE = Лист.Cells(Строка, 7).Value;
                Если СтрЗаменить(БДКонечная.MISTK," ","") = "" Тогда
                    БДКонечная.MISTK = ОбработатьСтроку(Лист.Cells(Строка, 3).Value,"MISTKOST");
                КонецЕсли;
                Лист.Cells(Строка, 3).Value = ЗапомнитьКоммент;
                БДКонечная.Записать();
                
                
                ОбработкаПрерыванияПользователя();
                
                
                
            КонецЕсли;
            Состояние("Обрабатывается " + Строка(НомерЛиста) + " лист из " + Строка(КоличествоЛистов), Строка/ВсегоСтрок*100);
            
        КонецЦикла;
        
        
    КонецЦикла;
    БДНачальная.Quit();
    БДКонечная.ЗакрытьФайл();    
    
    
    
    
    
    
    
    
КонецПроцедуры // ОткрытьИзEXCEL()
9 Табуретко
 
07.12.17
15:15
//Функция ОткрытиеEXCEL()
Excel = Новый COMОбъект("Excel.Application");
        Возврат Excel;

//Процедура ОбработкаИзEXCEL()
Excel = ОткрытиеEXCEL();
БДНачальная = Excel.WorkBooks.Open(ИзначальнаяТаблица);

//...

Excel.Quit();

так попробуй...
10 Флориан
 
07.12.17
15:17
Так

БДНачальная.DisplayAlerts = 0;
БДНачальная.Quit();

или так

БДНачальная.DisplayAlerts = 0;
БДНачальная.Workbooks.Close();
11 LeoKeyn
 
07.12.17
15:19
(10) Так пробовал, то же самое
12 пипец
 
07.12.17
15:21
(0) открывай только для чтения , параметр не помню
13 пипец
 
07.12.17
15:22
14 LeoKeyn
 
07.12.17
15:23
(10) Большущее спасибо это помогло) И правда просто ссылка терялась а я туплю как баран. Спасибо!)
15 LeoKeyn
 
07.12.17
15:23
(14) Извиняюсь не (10) , а (9) помогло :-)))
16 Табуретко
 
07.12.17
15:24
да, перед запуском обработки посмотри чтобы в процессах предыдущие ексели не закрытые обработкой не висели...
17 Сияющий в темноте
 
07.12.17
15:24
(10) У Workbooks нет метода Close - это коллекция - в ней нужно закрывать каждый элемент.
18 LeoKeyn
 
07.12.17
15:24
Всем большое спасибо за помощь в общем! :-)
19 Гипервизор
 
07.12.17
15:24
(14) О чем вам уже в (7) и сообщали.
20 LeoKeyn
 
07.12.17
15:27
(19) Да оттуда я сделал заключение, а в (9) меня подтолкнули :-)
21 Сияющий в темноте
 
07.12.17
15:28
Excel=CreateObject("Excel.Application")
Wb=Wxcel.Workbooks.Open(FileName)
Excel=Empty
; выполняем что-то
Excel=Wb.Application
Excel.DisplayAlerts=0
Wb.Close()
Excel.Quit()
22 Флориан
 
07.12.17
15:43
(17) вроде есть http://www.excel-team.ru/workbooks.php, и у меня работает
23 Ненавижу 1С
 
гуру
07.12.17
15:44
БД = Неопределено;
Excel = Неопределено;
24 Сияющий в темноте
 
07.12.17
16:04
(22) Workbooks(1).Close - транслируется в Workbooks.Item(1).Close - закрытие конкретной книги - в коллекции Item - свойство по умолчанию.