|
Закрыть 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 - свойство по умолчанию.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |