Сохранение данных нескольких макетов в книгу Excel с формулами без использования Com

30.09.25

Интеграция - Загрузка и выгрузка в Excel

Формируем 2 табличных документа из макетов и сохраняем их в книгу Excel с формулами без использования Com объектов.

Принцип работы: Формируем и сохраняем книгу Excel, открываем файл как архив, записываем формулы в соответствующие xml файлы листов, снова формируем архив и сохраняем как файл Excel.

Решение:

1. Создадим 2 макета для разных листов книги (если нужно несколько листов):

 

 

Формулы пишем прямо в макет как в файле Excel.

Создаем реквизиты:

 

 

2. Формируем 2 табличных документа из макетов и сохраняем формулы в Таблицу значений.

	Обработка =  РеквизитФормыВЗначение("Объект");
	Макет = Обработка.ПолучитьМакет("Лист1");
	Область = Макет.ПолучитьОбласть("ОбластьТаблица");
	СтруктураФормулы = Новый Структура("Лист, Ячейка, Формула");
	Для Строка = 1 По Область.ВысотаТаблицы Цикл
		Для Колонка = 1 По Область.ШиринаТаблицы Цикл
			ТекстЯчейки = Область.Область(Строка, Колонка).Текст;
			Если СтрНачинаетсяС(ТекстЯчейки, "=") Тогда
				СтруктураФормулы.Лист = 1;
				СтруктураФормулы.Формула = СтрЗаменить(ТекстЯчейки, "=", "");
				СтруктураФормулы.Ячейка = Символ(64 + Колонка) + Строка(Строка);
				ЗаполнитьЗначенияСвойств(Формулы.Добавить(), СтруктураФормулы);
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
	Таблица1.Вывести(Область);
	Макет = Обработка.ПолучитьМакет("Лист2");
	Область = Макет.ПолучитьОбласть("ОбластьТаблица");
	Для Строка = 1 По Область.ВысотаТаблицы Цикл
		Для Колонка = 1 По Область.ШиринаТаблицы Цикл
			ТекстЯчейки = Область.Область(Строка, Колонка).Текст;
			Если СтрНачинаетсяС(ТекстЯчейки, "=") Тогда
				СтруктураФормулы.Лист = 2;
				СтруктураФормулы.Формула = СтрЗаменить(ТекстЯчейки, "=", "");
				СтруктураФормулы.Ячейка = Символ(64 + Колонка) + Строка(Строка);
				ЗаполнитьЗначенияСвойств(Формулы.Добавить(), СтруктураФормулы);
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
	Таблица2.Вывести(Область);

3. Сохраняем в файл Excel

	ВременныйКаталог = КаталогВременныхФайлов();
	ИмяВременногоФайла= ПолучитьИмяВременногоФайла(".xlsx");
	Книга = Новый ПакетОтображаемыхДокументов;
	Лист1 = Книга.Состав.Добавить();
	Лист1.Данные = ПоместитьВоВременноеХранилище(Таблица1);
	Лист1.Наименование = "Лист 1";
	Лист2 = Книга.Состав.Добавить();
	Лист2.Данные = ПоместитьВоВременноеХранилище(Таблица2);
	Лист2.Наименование = "Лист 2";
	Книга.Записать(ИмяВременногоФайла, ТипФайлаПакетаОтображаемыхДокументов.XLSX);

4. Разархивируем

	Архив = Новый ЧтениеZipФайла(ИмяВременногоФайла, "");
	Архив.ИзвлечьВсе(ВременныйКаталог + "\xlsfrom1C", РежимВосстановленияПутейФайловZIP.Восстанавливать);
	Архив.Закрыть();

5. Меняем в нужных ячейках данные на формулы

	// Меняем в нужных ячейках на формулы
	ЗаменитьПараметры(ВременныйКаталог + "\xlsfrom1C\xl\worksheets\sheet1.xml", 1);
	ЗаменитьПараметры(ВременныйКаталог + "\xlsfrom1C\xl\worksheets\sheet2.xml", 2);

Процедура ЗаменитьПараметры(ИмяФайлаXML, НомерЛиста)
	Текст = Новый ТекстовыйДокумент;
	Текст.Прочитать(ИмяФайлаXML, "windows-1251");
	СтрокаXML = Текст.ПолучитьТекст();
	ФормулыЛиста = Формулы.НайтиСтроки(Новый Структура("Лист", НомерЛиста));
	Для Каждого Формула Из ФормулыЛиста Цикл
		ПозицияЯчейки = СтрНайти(СтрокаXML, "<c r=""" + Формула.Ячейка +"""");
		Если ПозицияЯчейки = 0 Тогда Продолжить; КонецЕсли;
		НачалоФормулы = СтрНайти(СтрокаXML, "<v>",,ПозицияЯчейки);
		Если НачалоФормулы = 0 Тогда Продолжить; КонецЕсли;
		КонецФормулы = СтрНайти(СтрокаXML, "</v>",,НачалоФормулы);
		Если КонецФормулы = 0 Тогда Продолжить; КонецЕсли;
		СтрокаXML = Лев(СтрокаXML, НачалоФормулы - 1) + "<f>" + Формула.Формула + "</f>" + Прав(СтрокаXML, СтрДлина(СтрокаXML) - КонецФормулы - 3);
	КонецЦикла;
	Текст.УстановитьТекст(СтрокаXML);
	Текст.Записать(ИмяФайлаXML, "windows-1251");
КонецПроцедуры

6. Заново формируем файл Excel

	АрхивРезультат = Новый ЗаписьZipФайла(ИмяВременногоФайла);
	АрхивРезультат.Добавить(ВременныйКаталог + "\xlsfrom1C\*.*", РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
	АрхивРезультат.Записать();

Итоговый код обработки:


//Обработка сохраняет 2 макета с формулами как книгу Excel 2мя листами без использования Com.
//Можно использовать как образец, при решении подобных задач.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Обработка =  РеквизитФормыВЗначение("Объект");
	Макет = Обработка.ПолучитьМакет("Лист1");
	Область = Макет.ПолучитьОбласть("ОбластьТаблица");
	СтруктураФормулы = Новый Структура("Лист, Ячейка, Формула");
	Для Строка = 1 По Область.ВысотаТаблицы Цикл
		Для Колонка = 1 По Область.ШиринаТаблицы Цикл
			ТекстЯчейки = Область.Область(Строка, Колонка).Текст;
			Если СтрНачинаетсяС(ТекстЯчейки, "=") Тогда
				СтруктураФормулы.Лист = 1;
				СтруктураФормулы.Формула = СтрЗаменить(ТекстЯчейки, "=", "");
				СтруктураФормулы.Ячейка = Символ(64 + Колонка) + Строка(Строка);
				ЗаполнитьЗначенияСвойств(Формулы.Добавить(), СтруктураФормулы);
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
	Таблица1.Вывести(Область);
	Макет = Обработка.ПолучитьМакет("Лист2");
	Область = Макет.ПолучитьОбласть("ОбластьТаблица");
	Для Строка = 1 По Область.ВысотаТаблицы Цикл
		Для Колонка = 1 По Область.ШиринаТаблицы Цикл
			ТекстЯчейки = Область.Область(Строка, Колонка).Текст;
			Если СтрНачинаетсяС(ТекстЯчейки, "=") Тогда
				СтруктураФормулы.Лист = 2;
				СтруктураФормулы.Формула = СтрЗаменить(ТекстЯчейки, "=", "");
				СтруктураФормулы.Ячейка = Символ(64 + Колонка) + Строка(Строка);
				ЗаполнитьЗначенияСвойств(Формулы.Добавить(), СтруктураФормулы);
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
	Таблица2.Вывести(Область);
КонецПроцедуры

&НаСервере
Процедура СохранитьВExcelНаСервере()
	ВременныйКаталог = КаталогВременныхФайлов();
	ИмяВременногоФайла= ПолучитьИмяВременногоФайла(".xlsx");
	// Временно, для удобства тестирования пишем на сервер в каталог C:\Test
	// В дальнейшем можно убрать и сделать передачу файла на клиента
	ВременныйКаталог = "C:\Test";
	ИмяВременногоФайла = "C:\Test\Test.xlsx";
	//
	Книга = Новый ПакетОтображаемыхДокументов;
	Лист1 = Книга.Состав.Добавить();
	Лист1.Данные = ПоместитьВоВременноеХранилище(Таблица1);
	Лист1.Наименование = "Лист 1";
	Лист2 = Книга.Состав.Добавить();
	Лист2.Данные = ПоместитьВоВременноеХранилище(Таблица2);
	Лист2.Наименование = "Лист 2";
	Книга.Записать(ИмяВременногоФайла, ТипФайлаПакетаОтображаемыхДокументов.XLSX);
	Архив = Новый ЧтениеZipФайла(ИмяВременногоФайла, "");
	Архив.ИзвлечьВсе(ВременныйКаталог + "\xlsfrom1C", РежимВосстановленияПутейФайловZIP.Восстанавливать);
	Архив.Закрыть();
	// Меняем в нужных ячейках на формулы
	ЗаменитьПараметры(ВременныйКаталог + "\xlsfrom1C\xl\worksheets\sheet1.xml", 1);
	ЗаменитьПараметры(ВременныйКаталог + "\xlsfrom1C\xl\worksheets\sheet2.xml", 2);
	
	АрхивРезультат = Новый ЗаписьZipФайла(ИмяВременногоФайла);
	АрхивРезультат.Добавить(ВременныйКаталог + "\xlsfrom1C\*.*", РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
	АрхивРезультат.Записать();
КонецПроцедуры

&НаКлиенте
Процедура СохранитьВExcel(Команда)
	СохранитьВExcelНаСервере();
КонецПроцедуры

&НаСервере
Процедура ЗаменитьПараметры(ИмяФайлаXML, НомерЛиста)
	Текст = Новый ТекстовыйДокумент;
	Текст.Прочитать(ИмяФайлаXML, "windows-1251");
	СтрокаXML = Текст.ПолучитьТекст();
	ФормулыЛиста = Формулы.НайтиСтроки(Новый Структура("Лист", НомерЛиста));
	Для Каждого Формула Из ФормулыЛиста Цикл
		ПозицияЯчейки = СтрНайти(СтрокаXML, "<c r=""" + Формула.Ячейка +"""");
		Если ПозицияЯчейки = 0 Тогда Продолжить; КонецЕсли;
		НачалоФормулы = СтрНайти(СтрокаXML, "<v>",,ПозицияЯчейки);
		Если НачалоФормулы = 0 Тогда Продолжить; КонецЕсли;
		КонецФормулы = СтрНайти(СтрокаXML, "</v>",,НачалоФормулы);
		Если КонецФормулы = 0 Тогда Продолжить; КонецЕсли;
		СтрокаXML = Лев(СтрокаXML, НачалоФормулы - 1) + "<f>" + Формула.Формула + "</f>" + Прав(СтрокаXML, СтрДлина(СтрокаXML) - КонецФормулы - 3);
	КонецЦикла;
	Текст.УстановитьТекст(СтрокаXML);
	Текст.Записать(ИмяФайлаXML, "windows-1251");
КонецПроцедуры

 

Вступайте в нашу телеграмм-группу Инфостарт

Сохранение Загрузка в книгу Excel с формулами без использования Com.

См. также

Загрузка и выгрузка в Excel Маркетплейсы Программист Бухгалтер Пользователь 1С v8.3 Бухгалтерский учет 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Управленческий учет Платные (руб)

Реальный помощник, с помощью которого Вы преобразуете необходимые документы для Wildberries, OZON, ЯндексМаркет, Мегамаркет, Aliexpress, Детский мир, Магнит Маркет (быв.МагнитЭкспресс), Лемана про, ЭНФАНТА (Акушерство), ЛаМода, Летуаль, Твой дом, Золотое Яблоко в документы "Отчет комиссионера (агента) о продажах" и другие. Работает в 1С:БП 3.0, 1С:БП 3.0 КОРП, 1С:УТ 11, 1С:УНФ, 1С:ERP Управление предприятием.

5400 руб.

12.08.2021    41941    486    71    

199

Загрузка и выгрузка в Excel Розничная торговля Логистика, склад и ТМЦ Ценообразование, анализ цен Прайсы Системный администратор Программист 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Загрузка номенклатуры из файлов Excel (xls, xlsx, ods, csv, mxl) в УТ11, КА 2, ERP 2, Розница 2. Задействованы все возможности конфигурации - заполнение реквизитов номенклатуры, дополнительных реквизитов и сведений, характеристики, доп.реквизиты и сведения характеристик. Дополнительные обработки для расширения возможностей.

11100 руб.

29.10.2014    225154    704    528    

478

Загрузка и выгрузка в Excel Оптовая торговля Бухгалтер Пользователь 1С v8.3 Управляемые формы 1C v8.2 1С:Бухгалтерия 2.0 1С:Бухгалтерия 3.0 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:Комплексная автоматизация 1.х 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 10 1С:Управление торговлей 11 1С:Розница 2 1С:Розница 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Универсальная обработка для загрузки документов из Excel в 1С. Забудьте о ручном вводе: загружайте документы из Excel в 1С за секунды! Не требует указания параметров (номера колонок, номер первой строки таблицы и т.д.) и предварительной настройки. Просто выбираете файл эксель, документ 1С и нажимаете кнопку "Загрузить"

8000 руб.

09.11.2016    258522    1147    938    

1078

Загрузка и выгрузка в Excel Логистика, склад и ТМЦ Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Бухгалтер Пользователь 1С v8.3 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Эволюция не стоит на месте - новая удобная версия функциональной обработки для Вашего бизнеса! Что же Вы получаете? Удобный и интуитивно понятный интерфейс с 3-мя этапами работы. 2 режима - автоматический и ручной. Чтение XLSX, XLSM, CSV, XML/YML форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 24.09.2025, версия 9.12 - 10.4)

18000 руб.

20.11.2015    166974    416    386    

538

Загрузка и выгрузка в Excel Маркетплейсы Программист Бухгалтер Пользователь 1С v8.3 Бухгалтерский учет Оперативный учет 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Бухгалтерский учет Платные (руб)

Обработки загрузки данных о продажах WildBerries предназначены для следующих конфигураций: Бухгалтерия предприятия, редакция 3.0; Управление нашей фирмой, редакция 3.0; Розница, редакция 3.0; Управление торговлей, редакция 11; Управление торговлей, редакция 10.3

6000 руб.

11.12.2019    61963    1055    3    

276

Загрузка и выгрузка в Excel Зарплата Кадровый учет Бухгалтер 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

Обработка позволяет загрузить из структурированного файла данные по физическим лицам, сотрудникам. Предусмотрено создание документов "Прием на работу". Данные загружаются не только в справочники и документы, но и в регистры сведений. Обработка разработана для конфигураций "Зарплата и Управление Персоналом, редакция 3.1"/"Зарплата и кадры государственного учреждения, редакция 3.1" на платформе 8.3.

6000 руб.

15.07.2015    67707    111    51    

115
Для отправки сообщения требуется регистрация/авторизация