1. Светлый ум 218 21.12.15 08:09 Сейчас в теме

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

	// 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 51 21.12.15 11:00 Сейчас в теме
см. вложение.

немного поменял код, также был косяк с макетом екселя, тоже поправил.
Прикрепленные файлы:
ПФ (внешняя) + Excel шаблон - Версия 3 - для infostart (1).epf
Остальные ответы
Избранное Подписка Сортировка: Древо
6. 32ops 112 21.12.15 09:36 Сейчас в теме
(1) Непонятное, что-то. Excel.visible=1 попробовать и EnableEvents,DisplayAlerts - убрать совсем - будут ли изменения?
9. Светлый ум 218 21.12.15 10:21 Сейчас в теме
(6)32ops, "Excel.visible=1 попробовать и EnableEvents,DisplayAlerts - убрать совсем"
- Попробовал, не помогло.
12. Светлый ум 218 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 45 21.12.15 09:04 Сейчас в теме
надо еще закрыть файл:
Excel.Close()
4. Светлый ум 218 21.12.15 09:29 Сейчас в теме
1) Метод объекта не обнаружен (Close)
Excel.Close();

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

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

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

Добавлю в своей публикации ссылку на эту тему. Полезно и лаконично.
Светлый ум; +1 Ответить
17. Светлый ум 218 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 51 21.12.15 11:34 Сейчас в теме
(13) Светлый ум, насчет формата:

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

Вакансии

Программист 1С
Нижний Новгород
зарплата от 120 000 руб.
Полный день

Программист 1С
Санкт-Петербург
зарплата от 120 000 руб.
Полный день

Программист 1С
Новосибирск
зарплата от 80 000 руб. до 100 000 руб.
Полный день

Системный аналитик
Новосибирск
зарплата от 80 000 руб. до 100 000 руб.
Полный день

Программист 1С
Салехард
зарплата от 80 000 руб. до 200 000 руб.
Полный день