Работа с Excel из 1С. Не получается программно открыть файл Excel, для редактирования пользователем.

1. Светлый ум 406 21.12.15 08:09 Сейчас в теме
	// 1) Заходим в Excel	
	Excel = Новый COMОбъект("Excel.Application");
	Excel.DisplayAlerts = 0;
	Excel.ScreenUpdating = 0;
	Excel.EnableEvents = 0;    
	Excel.Visible = 0;
	
	ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xls");
	ДвоичныеДанные = ПолучитьМакет("ШаблонExcel");
	ДвоичныеДанные.Записать(ИмяВременногоФайла);
	Книга = Excel.WorkBooks.Open(ИмяВременногоФайла);
	Лист = Книга.WorkSheets(1);
	
	// 2) Как-то редактируем Excel
	ШапкаОтчетаОбласть = Лист.Range("Шапка");
	ШапкаОтчетаОбласть.Find("<ДатаОтчета>").Value = Строка(Формат(СсылкаНаОбъект.ПолучитьОбъект().Дата, "ДЛФ=ДД"));
	
	// 3) Сохраняем Excel 
	Книга.SaveAs(ИмяВременногоФайла);  
	
	  
	// 4) Открываем Excel, для редактирования пользователем
	
	Excel.ReferenceStyle = 1;		//Стиль ссылок A1
	Excel.EnableEvents=Истина;		//разрешена обработка событий экселем
	Excel.visible=Истина;			//Отобразить файл.
	Excel.DisplayAlerts = Истина;
Показать
+
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
11. ditp 91 21.12.15 11:00 Сейчас в теме
см. вложение.

немного поменял код, также был косяк с макетом екселя, тоже поправил.
Прикрепленные файлы:
ПФ (внешняя) + Excel шаблон - Версия 3 - для infostart (1).epf
+
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
6. 32ops 191 21.12.15 09:36 Сейчас в теме
(1) Непонятное, что-то. Excel.visible=1 попробовать и EnableEvents,DisplayAlerts - убрать совсем - будут ли изменения?
+
9. Светлый ум 406 21.12.15 10:21 Сейчас в теме
(6)32ops, "Excel.visible=1 попробовать и EnableEvents,DisplayAlerts - убрать совсем"
- Попробовал, не помогло.
+
12. Светлый ум 406 21.12.15 11:11 Сейчас в теме
Огромное спасибо, итоговый код:
---

мИмяШаблона= "ШаблонРеестр";	
	ФайлОбработки = Новый Файл(ИспользуемоеИмяФайла);
	
	//1) Заходим в Excel	
	Excel = Новый COMОбъект("Excel.Application");
	ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xlsx");
	ИмяВременногоФайла2 = ПолучитьИмяВременногоФайла("xlsx");
	ДвоичныеДанные = ПолучитьМакет("ШаблонExcel");
	ДвоичныеДанные.Записать(ИмяВременногоФайла);
	Книга = Excel.WorkBooks.Open(ИмяВременногоФайла);
	Лист = Книга.WorkSheets(1);
	
	//2) Как-то редактируем Excel
	ШапкаОтчетаОбласть = Лист.Range("Шапка");
	ШапкаОтчетаОбласть.Find("<ДатаОтчета>").Value = Строка(Формат(СсылкаНаОбъект.ПолучитьОбъект().Дата, "ДЛФ=ДД"));
		
	//3) Сохраняем Excel 
	Книга.SaveAs(ИмяВременногоФайла2);  
	УдалитьФайлы(ИмяВременногоФайла);
	
	// 4) Открываем Excel, для редактирования пользователем
	Excel.Visible	= Истина;
Показать
timeforlive; +1
14. alljoke 21.12.15 11:19 Сейчас в теме
Процедура СформироватьПФ_Excel() Экспорт
	
	мИмяШаблона= "ШаблонРеестрПлатежейТНП1";	
	ФайлОбработки = Новый Файл(ИспользуемоеИмяФайла);
	
	//1) Заходим в Excel	
	Excel = Новый COMОбъект("Excel.Application");
	Excel.DisplayAlerts = 0;
	Excel.ScreenUpdating = 0;
	Excel.EnableEvents = 0;    
	Excel.Visible = 0;
	
	ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xls");
	ДвоичныеДанные = ПолучитьМакет("ШаблонExcel");
	ДвоичныеДанные.Записать(ИмяВременногоФайла);
	Книга = Excel.WorkBooks.Open(ИмяВременногоФайла);
	Лист = Книга.WorkSheets(1);
	
	//2) Как-то редактируем Excel
	ШапкаОтчетаОбласть = Лист.Range("Шапка");
	ШапкаОтчетаОбласть.Find("<ДатаОтчета>").Value = Строка(Формат(СсылкаНаОбъект.ПолучитьОбъект().Дата, "ДЛФ=ДД"));
		
	//3) Сохраняем Excel 
	Книга.SaveAs(ИмяВременногоФайла);  
	//Книга.Close();
		
	//4) Открываем Excel, для редактирования пользователем
	
	Excel.ReferenceStyle = 1;		//Стиль ссылок A1
	//Excel.EnableEvents=Истина;		//разрешена обработка событий экселем
	//Книга.DisplayWorkbookTabs = True;
	
	//Excel.DisplayAlerts = Истина;
	Excel.ScreenUpdating = False;
    Лист.Visible = "xlSheetVisible";
    Excel.ScreenUpdating = True;
	Excel.visible = Истина;			//Отобразить файл.
	//Книга.Close();
   	//Excel.Quit();
	
КонецПроцедуры
Показать


Попробуйте.
Светлый ум; +1
2. torch 128 21.12.15 09:04 Сейчас в теме
надо еще закрыть файл:
Excel.Close()
+
4. Светлый ум 406 21.12.15 09:29 Сейчас в теме
1) Метод объекта не обнаружен (Close)
Excel.Close();

2) Книга.Close() - отработало, но ничего не изменилось.

(2)(3) torch, не взлетело.
+
3. torch 128 21.12.15 09:05 Сейчас в теме
Если это не прокатит надо
Книга.Close()
+
5. Светлый ум 406 21.12.15 09:33 Сейчас в теме
Сейчас сделаю и выложу внешнюю обработку для отладки, может так проще подсказать будет. А то уже кучу всего перепробовал - а танцы с бубном всё не помогают.
+
7. alljoke 21.12.15 09:53 Сейчас в теме
10. Светлый ум 406 21.12.15 10:22 Сейчас в теме
(7)alljoke, Excel.Quit() - эта команда просто закрыла эксель, а мне нужен открытый файл Excel для редактирования.
+
8. Светлый ум 406 21.12.15 10:19 Сейчас в теме
Выкладываю файл внешней обработке - СсылкаНаОбъект привязана к "Реализации товаров и услуг", т.е. обработка отработает в любой типовой (у меня УПП).
Прикрепленные файлы:
ПФ (внешняя) + Excel шаблон - Версия 3 - для infostart.epf
+
11. ditp 91 21.12.15 11:00 Сейчас в теме
см. вложение.

немного поменял код, также был косяк с макетом екселя, тоже поправил.
Прикрепленные файлы:
ПФ (внешняя) + Excel шаблон - Версия 3 - для infostart (1).epf
+
13. Светлый ум 406 21.12.15 11:13 Сейчас в теме
(11) ditp, И если не трудно опишите в чем был косяк в макете?
+
15. timeforlive 15 21.12.15 11:24 Сейчас в теме
(13) Светлый ум, я оставлял на сайте .epf с исходным кодом по выгрузке из Excel в 1С (в том числе формирование таблицы Excel из 1С):
http://infostart.ru/public/366601/
Вдруг поможет.

Добавлю в своей публикации ссылку на эту тему. Полезно и лаконично.
nikgol; Светлый ум; +2
17. Светлый ум 406 21.12.15 13:04 Сейчас в теме
(15) timeforlive, да действительно интересная и хорошо оформленная статья, от себя выложил пару плюшек по работе с Excel - продублирую здесь:

//### Примеры работы с Excel ячейками ###

//1) Стандартное форматирование числа
// mSheet.Cells(row,i).Value=Формат(стр[мИмя],"ЧДЦ=2; ЧН=; ЧГ=0");

//2) Стандартное форматирование даты
// ШапкаОтчета.Find("<ДатаОтчета>").Value = Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");

//3)Программная установка формул в ячейку - Excel в 1с.
а) Например, нужно посчитать сумму в столбце 8 в той же строке из столбца 1+ столбца 2.
СтрокаСФормулой = "=RC[-7]+ RC[-6]";
Лист.Cells(НомерСтроки,НомерКолонки).Formula = СтрокаСФормулой.
---------------------
б) Считаем итого по строкам:
//Шаблон формулы: "=SUM(F13:F14)";
СтрокаСФормулойИтогоОстатки = "=SUM(F" + Строка(НомерИсходнойСтрокиОстаткиОборотыExcel) +
":F" + Строка(НомерСтрокиОстаткиОборотыДляФормулы) + ")";

ТекСтрокаПодвалИтогоОстаток.Value = СтрокаСФормулойИтогоОстатки;
+
16. ditp 91 21.12.15 11:34 Сейчас в теме
(13) Светлый ум, насчет формата:

Я попробовал ваш макет из обработки выгрузить с расширением xls и открыть в экселе, получил ошибку формата.
Перепаковал файл, переименовал в xlsx, при попытке открытия получил опять несоответствие формата, но файл открылся.
При попытке пересохранения файла ексель предложил считать его шаблоном (xltx).
И только когда принудительно записал как xlsx, файло стало открываться без лишних вопросов.
Светлый ум; +1
18. babys 90 07.12.17 15:07 Сейчас в теме
Подниму ветку.
А без создания временно файла никак?
+
19. Интерес 15.05.18 17:29 Сейчас в теме
Книга = Excel.WorkBooks.Open(ИмяФайла,,Ложь);
может это поможет
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот