Может кто знает? Пытаюсь создать файл эксель, чтобы потом туда загрузить свою таблицу значений, но выдаёт ошибку

1. user973528 10.10.18 14:02 Сейчас в теме
Попытка
    Эксель = ПолучитьCOMОбъект("C:\Users\admin_1C\Downloads\Советский104.xls"); 
	Исключение
   	Сообщить(ОписаниеОшибки() + " Программа Exсel не установлена на данном компьютере!"); 
   	Возврат;
	КонецПопытки; 
	Книга = Эксель.WorkBooks.Add();
	Лист = Книга.WorkSheets(1);


	Попытка
    Книга.SaveAs("C:\Users\admin_1C\Downloads\Советский104.xls"); 
	Исключение
	Сообщить(ОписаниеОшибки()+" Файл не сохранен!"); 
   	Возврат;
	КонецПопытки;
Показать


Поле объекта WorkBooks не найдено
+
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
26. Healer 1 10.10.18 14:51 Сейчас в теме
Ну,
Лист = Книга.WorkSheets(1);
на
Лист = Книга.WorkSheets.Add();
поправили?
+
2. Healer 1 10.10.18 14:14 Сейчас в теме
Посмотрите отладчиком, создаётся ли СОМ-объект.
+
4. user973528 10.10.18 14:15 Сейчас в теме
(2) В переменной эксель ком объект есть, посмотрел, но почему ругается не пойму
+
3. Healer 1 10.10.18 14:15 Сейчас в теме
Также посмотрите, нужного ли он типа. А то может у вас блокнотом "xls"-файлы открываются. То есть ассоциацию приложений уточните.
+
5. user973528 10.10.18 14:16 Сейчас в теме
(3) Тип Эксель документ
+
6. Healer 1 10.10.18 14:16 Сейчас в теме
Вообще хорошо бы вы сказали, какая версия платформы и вариант базы (файловая, клиент-серверная) ...
+
7. user973528 10.10.18 14:18 Сейчас в теме
(6)
1С:Учет в управляющих компаниях ЖКХ, ТСЖ и ЖСК, редакция 3.0
1С:Предприятие 8.3 (8.3.12.1440)
Файловая
+
8. antz 10.10.18 14:18 Сейчас в теме
Эксель.Application.Workbooks
user973528; +1
16. user973528 10.10.18 14:35 Сейчас в теме
(8) Не подскажете еще, как создать колонки в эксель документе и засунуть свои данные из запроса?
+
21. antz 10.10.18 14:41 Сейчас в теме
(16) Колонки там уже есть) Если данных немного - добавлять через лист.Cells. На инфостарте куча публикаций о работе 1С с excel и word, быстрее прочитать и уяснить, чем тут по крохам собирать)
+
22. user973528 10.10.18 14:42 Сейчас в теме
(21)
Если данных немного - добавлять через лист.Cells. На инфостарте куча публикаций о работе 1С с excel и word, быстрее прочитать и уяснить, чем тут по крохам собирать)


У меня там получается всего 4 колонки и по ним данные
+
27. antz 10.10.18 14:52 Сейчас в теме
(22) Щас пример нарисую
+
37. user973528 10.10.18 15:16 Сейчас в теме
(27) Можно же как то с помощью цикла позасовывать данные из запроса в мой документ?
+
40. antz 10.10.18 15:18 Сейчас в теме
(37) Можно, сейчас нарисую.
+
42. antz 10.10.18 15:29 Сейчас в теме
44. user973528 10.10.18 15:50 Сейчас в теме
(42)

И только это заполняет
Прикрепленные файлы:
+
43. user973528 10.10.18 15:47 Сейчас в теме
(27) Ошибку пишет, хотя сделал по вашему примеру

{ВнешняяОбработка.ВыгрузкаВExcel.Форма.Форма.Форма(54)}: Ошибка при установке значения атрибута контекста (Value)
Лист.Cells(НомерСтроки, 2).Value = Строка.Адрес;
по причине:
Произошла исключительная ситуация (0x800a03ec)
Произошла исключительная ситуация (0x800a03ec)

&НаСервере
Процедура ПолучитьЛицевыеСчетаИзСправочника()
	
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	               |	КВП_ЛицевыеСчета.Наименование КАК Наименование,
	               |	КВП_ЛицевыеСчета.ОтветственныйСобственникПредставление КАК ОтветственныйСобственникПредставление,
	               |	КВП_ЛицевыеСчета.Адрес КАК Адрес
	               |ИЗ
	               |	Справочник.КВП_ЛицевыеСчета КАК КВП_ЛицевыеСчета
	               |ГДЕ
	               |	КВП_ЛицевыеСчета.Адрес.Владелец = &Здания";
	
	
	Запрос.УстановитьПараметр("Здания",Объект.Здания);
	
	ТЗ = Запрос.Выполнить().Выгрузить();
	
	ТЗ.Колонки.Добавить("Улица");
	ТЗ.Колонки.Добавить("Балансодержатель");
	
	//Цикл для заполнения Здания и Организации
	
	Для Каждого Стр Из ТЗ Цикл
		
		Стр.Улица = Объект.Здания;
		Стр.Балансодержатель = Объект.Организация;
		
	КонецЦикла;
	
    Эксель = ПолучитьCOMОбъект("C:\Users\admin_1C\Downloads\Советский104.xls"); 
	Книга = Эксель.Application.Workbooks.Add();
	Лист = Книга.WorkSheets.Add();
	Лист.Name = "Выгрузка";
	Лист.Cells(1,1).Value = "Лицевые Счета";
	Лист.Cells(1,2).Value = "Адрес";
	Лист.Cells(1,3).Value = "Ответственный";
	Лист.Cells(1,4).Value = "Организация";
	Лист.Cells(1,5).Value = "Улица";
	
	НомерСтроки = 2;
	Для каждого Строка из ТЗ Цикл    
		
		Лист.Cells(НомерСтроки, 1).Value = Строка.Наименование;
			
		Лист.Cells(НомерСтроки, 2).Value = Строка.Адрес;
			
		Лист.Cells(НомерСтроки, 3).Value = Строка.ОтветственныйСобственникПредставление;
			
		Лист.Cells(НомерСтроки, 4).Value = Строка.Балансодержатель;
		
		Лист.Cells(НомерСтроки, 5).Value = Строка.Улица;

		
		НомерСтроки = НомерСтроки + 1
		
	КонецЦикла;
		
	НаименованиеФайла = "Выгрузка ЛС";
	Книга.SaveAs("C:\Users\admin_1C\Downloads\Советский104.xls");
	Книга.Close();
	
КонецПроцедуры
Показать
+
45. antz 10.10.18 15:50 Сейчас в теме
(43) Зачем книгу добавлять? Добавьте еще один лист в существующую, как в примере.
+
46. user973528 10.10.18 15:56 Сейчас в теме
(45)
&НаСервере
Процедура ПолучитьЛицевыеСчетаИзСправочника()
	
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	               |	КВП_ЛицевыеСчета.Наименование КАК Наименование,
	               |	КВП_ЛицевыеСчета.ОтветственныйСобственникПредставление КАК ОтветственныйСобственникПредставление,
	               |	КВП_ЛицевыеСчета.Адрес КАК Адрес
	               |ИЗ
	               |	Справочник.КВП_ЛицевыеСчета КАК КВП_ЛицевыеСчета
	               |ГДЕ
	               |	КВП_ЛицевыеСчета.Адрес.Владелец = &Здания";
	
	
	Запрос.УстановитьПараметр("Здания",Объект.Здания);
	
	ТЗ = Запрос.Выполнить().Выгрузить();
	
	ТЗ.Колонки.Добавить("Улица");
	ТЗ.Колонки.Добавить("Балансодержатель");
	
	Для Каждого Стр Из ТЗ Цикл
		
		Стр.Улица = Объект.Здания;
		Стр.Балансодержатель = Объект.Организация;
		
	КонецЦикла;
	
    Эксель = ПолучитьCOMОбъект("C:\Users\admin_1C\Downloads\Советский104.xls"); 
	Книга = Эксель.Application.Workbooks(1);
	Лист = Книга.WorkSheets.Add();
	Лист.Name = "Выгрузка";
	Лист.Cells(1,1).Value = "Лицевые Счета";
	Лист.Cells(1,2).Value = "Адрес";
	Лист.Cells(1,3).Value = "Ответственный";
	Лист.Cells(1,4).Value = "Организация";
	Лист.Cells(1,5).Value = "Улица";
	
	НомерСтроки = 2;
	Для каждого Строка из ТЗ Цикл    
		
		Лист.Cells(НомерСтроки, 1).Value = Строка.Наименование;
			
		Лист.Cells(НомерСтроки, 2).Value = Строка.Адрес;
			
		Лист.Cells(НомерСтроки, 3).Value = Строка.ОтветственныйСобственникПредставление;
			
		Лист.Cells(НомерСтроки, 4).Value = Строка.Балансодержатель;
		
		Лист.Cells(НомерСтроки, 5).Value = Строка.Улица;

		
		НомерСтроки = НомерСтроки + 1
		
	КонецЦикла;
		
	НаименованиеФайла = "Выгрузка ЛС";
	Книга.SaveAs("C:\Users\admin_1C\Downloads\Советский104.xls");
	Книга.Close();
	
КонецПроцедуры
Показать


Всёравно валится на адресе

{ВнешняяОбработка.ВыгрузкаВExcel.Форма.Форма.Форма(52)}: Ошибка при установке значения атрибута контекста (Value)
Лист.Cells(НомерСтроки, 2).Value = Строка.Адрес;
по причине:
Произошла исключительная ситуация (0x800a03ec)
+
47. user973528 10.10.18 16:04 Сейчас в теме
(45)
Прикрепленные файлы:
+
48. antz 10.10.18 16:14 Сейчас в теме
(47) А если в запросе выбирать Адрес.Наименование, чтобы в эксель все-таки строку передавать?

Или хотя бы так:

Лист.Cells(НомерСтроки, 2).Value = СокрЛП(Строка.Адрес);
+
49. user973528 10.10.18 16:24 Сейчас в теме
(48) Да. спасибо, тут уже я полный дебил
+
50. user973528 10.10.18 16:27 Сейчас в теме
(48)
Строка.Адрес


Такой еще вопрос, у меня эксель открывается на середине кода и начинает заполнять всё ячейки будучи открытым.
+
24. user973528 10.10.18 14:46 Сейчас в теме
(21)
Лист.Columns(1)= "Лицевой счет";
Лист.Columns(2) = "Адрес";
Лист.Columns(3) = "Ответственный";
Лист.Columns(4) = "Организация";

Выдаёт ошибку неопознанного оператора

{ВнешняяОбработка.ВыгрузкаВExcel.Форма.Форма.Форма(68,18)}: Неопознанный оператор
Лист.Columns(1) <<?>>= "Лицевой счет"; (Проверка: Тонкий клиент)
+
9. Healer 1 10.10.18 14:20 Сейчас в теме
А, вот ещё: файл в момент срабатывания кода "ПолучитьCOMОбъект("C:\Users\admin_1C\Downloads\Советский104.xls")" должен быть закрыт.
+
10. user973528 10.10.18 14:20 Сейчас в теме
11. Healer 1 10.10.18 14:22 Сейчас в теме
...может всё же
Книга = Эксель.Application.WorkBooks.Add();
, а не
Книга = Эксель.WorkBooks.Add();
?
user973528; +1
12. user973528 10.10.18 14:25 Сейчас в теме
(11)Произошла исключительная ситуация (Microsoft Excel): Сохранить файл под именем, совпадающим с именем открытого документа, невозможно.

И открывает пустой документ экселя "Книга1"
+
13. user973528 10.10.18 14:25 Сейчас в теме
(11) Проверил в диспетчере, нигде открытого нету
+
14. user973528 10.10.18 14:26 Сейчас в теме
Надо наверно лучше сделать чтобы пользователь мог сам дать название файлу и сохранить его
+
15. Healer 1 10.10.18 14:35 Сейчас в теме
А Вы лист хотите добавить? А то добавляете книгу... странно это...
+
17. Healer 1 10.10.18 14:35 Сейчас в теме
18. Healer 1 10.10.18 14:38 Сейчас в теме
Так если вам содержимое файла "C:\Users\admin_1C\Downloads\Советский104.xls" не нужно, а нужен чистый файл, создайте его вот так:
Эксель = ПолучитьCOMОбъект(, "Excel.Application");
+
19. user973528 10.10.18 14:39 Сейчас в теме
(18) [IS-QUOTE]Эксель = ПолучитьCOMОбъект(, "Excel.Application");[/QUOTE

Хорошо, только куда он его создаст?
+
20. user973528 10.10.18 14:40 Сейчас в теме
(18)

Лупит теперь так

{ВнешняяОбработка.ВыгрузкаВExcel.Форма.Форма.Форма(65)}: Ошибка при вызове метода контекста (ПолучитьCOMОбъект)
Эксель = ПолучитьCOMОбъект(, "Excel.Application");
по причине:
Ошибка получения объекта COM: -2147221021(0x800401E3): Операция недоступна
Ошибка получения объекта COM: -2147221021(0x800401E3): Операция недоступна
+
23. Healer 1 10.10.18 14:44 Сейчас в теме
Вот так вот:
Книга = Эксель.WorkBooks.Add();
НаименованиеФайла = "123";
Книга.SaveAs(КаталогВременныхФайлов() + НаименованиеФайла + ".xls");
+
25. user973528 10.10.18 14:48 Сейчас в теме
(23)

Всёравно та же самая ошибка с операцией
+
28. Healer 1 10.10.18 14:53 Сейчас в теме
Да, давайте весь код сюда, позырим...
+
29. user973528 10.10.18 14:54 Сейчас в теме
(28)
	 
    Эксель = ПолучитьCOMОбъект(,"Excel.Application"); 
	Книга = Эксель.Application.Workbooks.Add();
	Лист = Книга.WorkSheets.Add();
	Лист.Name = "Выгрузка Лицевых счетов по " + Объект.Здания;
	Лист.Cells(1,1).Value = "Лицевые счета";
	
	//Лист.Columns(1)= "Лицевой счет";
	//Лист.Columns(2) = "Адрес";
	//Лист.Columns(3) = "Ответственный";
	//Лист.Columns(4) = "Организация";
	
	НаименованиеФайла = "Выгрузка ЛС";
	Книга.SaveAs("C:\Desktop\test.xlsx");
	Книга.Close();
Показать
+
30. user973528 10.10.18 14:55 Сейчас в теме
Эксель = ПолучитьCOMОбъект(,"Excel.Application");

Тут в чем то ошибка
+
31. Healer 1 10.10.18 14:58 Сейчас в теме
Видимо, COM "Excel.Application" не в порядке...
+
32. user973528 10.10.18 15:01 Сейчас в теме
(31)
"Excel.Application" не в порядке...


Выдрал уже даже из помощника, всё равно такая же ошибка
+
34. user973528 10.10.18 15:12 Сейчас в теме
(31) Что то получилось.

Осталось теперь только из запроса туда данные запихнуть
Прикрепленные файлы:
+
33. wermah 10.10.18 15:01 Сейчас в теме
А зачем так извращаться, если нужно записать новый эксель, а не дополнить с какими нибудь данными
Проще через ТабличныйДокумент
ТабДокумент.Записать("Счет_N" + НомерСчета,ТипФайлаТабличногоДокумента.XLS);
Infector; alex-l19041; +2
51. Healer 1 10.10.18 16:32 Сейчас в теме
(33) Таким манером можно только "лист эксель" сохранить, а не книгу с листами, так что этот вариант не подходит.
+
35. Stackmann 10.10.18 15:14 Сейчас в теме
И в чем была ошибка? В названии COM-объекта?
+
36. user973528 10.10.18 15:15 Сейчас в теме
(35) Я лупанул так

Эксель = ПолучитьCOMОбъект("C:\Users\admin_1C\Downloads\Советский104.xls");

И он открывает мне при нажатие на кнопку "Сформировать" новый документ экселя
+
38. Stackmann 10.10.18 15:16 Сейчас в теме
(36) Именно это я и хотел вам предложить попробовать )
+
39. user973528 10.10.18 15:18 Сейчас в теме
&НаСервере
Процедура ПолучитьЛицевыеСчетаИзСправочника()
	
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	               |	КВП_ЛицевыеСчета.Наименование КАК Наименование,
	               |	КВП_ЛицевыеСчета.ОтветственныйСобственникПредставление КАК ОтветственныйСобственникПредставление,
	               |	КВП_ЛицевыеСчета.Адрес КАК Адрес
	               |ИЗ
	               |	Справочник.КВП_ЛицевыеСчета КАК КВП_ЛицевыеСчета
	               |ГДЕ
	               |	КВП_ЛицевыеСчета.Адрес.Владелец = &Здания";
	
	
	Запрос.УстановитьПараметр("Здания",Объект.Здания);
	
	ТЗ = Запрос.Выполнить().Выгрузить();
	
	ТЗ.Колонки.Добавить("Улица");
	ТЗ.Колонки.Добавить("Балансодержатель");
	
	Сообщить(ТЗ);
	
	Для Каждого Стр Из ТЗ Цикл
		
		Стр.Улица = Объект.Здания;
		Стр.Балансодержатель = Объект.Организация;
		
	КонецЦикла;
	
	Сообщить(ТЗ);
	 
    Эксель = ПолучитьCOMОбъект("C:\Users\admin_1C\Downloads\Советский104.xls"); 
	Книга = Эксель.Application.Workbooks.Add();
	Лист = Книга.WorkSheets.Add();
	Лист.Name = "Выгрузка";
	Лист.Cells(1,1).Value = "Лицевые Счета";
	Лист.Cells(1,2).Value = "Адрес";
	Лист.Cells(1,3).Value = "Ответственный";
	Лист.Cells(1,4).Value = "Организация";
		
	НаименованиеФайла = "Выгрузка ЛС";
	Книга.SaveAs("C:\Users\admin_1C\Downloads\Советский104.xls");
	Книга.Close();
	
КонецПроцедуры
Показать


Создал еще запрос, где в ТЗ мои данные "Адреса, лицевые счета и т.д"
Таблица значений у меня в ТЗ
Можно ли как то из этой ТЗ заполнить мои колонки данными
+
41. wermah 10.10.18 15:28 Сейчас в теме
(39)
Сч = 1
Для каждого строка из ТЗ Цикл
    Сч =Сч+1;	
    Лист.Cells(Сч,1).Value = строка.Значение1;
	Лист.Cells(Сч,2).Value = строка.Значение2;
	Лист.Cells(Сч,3).Value = строка.Значение3;
	Лист.Cells(Сч,4).Value = строка.Значение4;
КонецЦикла;

Думаю как то так можно
+
Внимание! Тема сдана в архив

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