Вход | Регистрация


1С:Предприятие ::

Метки: 

Закрыть Excel программно

Я
   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 не открыты.
   Tatitutu
 
3 - 07.12.17 - 14:37
//закрывает активную книгу

Excel.ActiveWorkbook.Close();
   LeoKeyn
 
4 - 07.12.17 - 14:44
(1) (3) Не работает
{ВнешняяОбработка.ПерегрузкаDBF.Форма.Форма.Форма(192)}: Значение не является значением объектного типа (Quit)
      Excel.Quit();
   LeoKeyn
 
5 - 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 из книги не додумались.
   LeoKeyn
 
8 - 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();
 
 
   LeoKeyn
 
11 - 07.12.17 - 15:19
(10) Так пробовал, то же самое
   пипец
 
12 - 07.12.17 - 15:21
(0) открывай только для чтения , параметр не помню
   пипец
 
13 - 07.12.17 - 15:22
   LeoKeyn
 
14 - 07.12.17 - 15:23
(10) Большущее спасибо это помогло) И правда просто ссылка терялась а я туплю как баран. Спасибо!)
   LeoKeyn
 
15 - 07.12.17 - 15:23
(14) Извиняюсь не (10) , а (9) помогло :-)))
   Табуретко
 
16 - 07.12.17 - 15:24
да, перед запуском обработки посмотри чтобы в процессах предыдущие ексели не закрытые обработкой не висели...
   Сияющий в темноте
 
17 - 07.12.17 - 15:24
(10) У Workbooks нет метода Close - это коллекция - в ней нужно закрывать каждый элемент.
   LeoKeyn
 
18 - 07.12.17 - 15:24
Всем большое спасибо за помощь в общем! :-)
   Гипервизор
 
19 - 07.12.17 - 15:24
(14) О чем вам уже в (7) и сообщали.
   LeoKeyn
 
20 - 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, и у меня работает
   Ненавижу 1С
 
23 - 07.12.17 - 15:44
БД = Неопределено;
Excel = Неопределено;
   Сияющий в темноте
 
24 - 07.12.17 - 16:04
(22) Workbooks(1).Close - транслируется в Workbooks.Item(1).Close - закрытие конкретной книги - в коллекции Item - свойство по умолчанию.



Список тем форума
Рекламное место пустует  
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует