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 10.10.18 14:51 Сейчас в теме
Ну,
Лист = Книга.WorkSheets(1);
на
Лист = Книга.WorkSheets.Add();
поправили?
2. Healer 10.10.18 14:14 Сейчас в теме
Посмотрите отладчиком, создаётся ли СОМ-объект.
4. user973528 10.10.18 14:15 Сейчас в теме
(2) В переменной эксель ком объект есть, посмотрел, но почему ругается не пойму
3. Healer 10.10.18 14:15 Сейчас в теме
Также посмотрите, нужного ли он типа. А то может у вас блокнотом "xls"-файлы открываются. То есть ассоциацию приложений уточните.
5. user973528 10.10.18 14:16 Сейчас в теме
6. Healer 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 Сейчас в теме
37. user973528 10.10.18 15:16 Сейчас в теме
(27) Можно же как то с помощью цикла позасовывать данные из запроса в мой документ?
40. antz 10.10.18 15:18 Сейчас в теме
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 Сейчас в теме
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 10.10.18 14:20 Сейчас в теме
А, вот ещё: файл в момент срабатывания кода "ПолучитьCOMОбъект("C:\Users\admin_1C\Downloads\Советский104.xls")" должен быть закрыт.
10. user973528 10.10.18 14:20 Сейчас в теме
11. Healer 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 10.10.18 14:35 Сейчас в теме
А Вы лист хотите добавить? А то добавляете книгу... странно это...
17. Healer 10.10.18 14:35 Сейчас в теме
18. Healer 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 10.10.18 14:44 Сейчас в теме
Вот так вот:
Книга = Эксель.WorkBooks.Add();
НаименованиеФайла = "123";
Книга.SaveAs(КаталогВременныхФайлов() + НаименованиеФайла + ".xls");
25. user973528 10.10.18 14:48 Сейчас в теме
(23)

Всёравно та же самая ошибка с операцией
28. Healer 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 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 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;
КонецЦикла;

Думаю как то так можно
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Разработчик 1С
Москва
зарплата от 100 000 руб. до 160 000 руб.
Полный день

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

Консультант-аналитик 1С
Санкт-Петербург
Полный день

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

Удаленный ИТ-журналист
Санкт-Петербург
По совместительству