Сохранение табличного документа в EXCEL (xlsx) с форматом ячеек Число, Дата, Дата время

Публикация № 1486726 26.07.21

Пользовательские инструменты - Загрузка и выгрузка в Excel

EXCEL дата число xlsx

Часто требуется сформировать из 1С файл EXCEL, с сохранением типов у ячеек, Число или Дата, например. И тут очевидные вещи превращаются в изобретение велосипедов. Так как табличный документ не может сохранять ячейки в формате Дата, Дата время.

Для решения проблемы можно например использовать EXCEL через ком объект, но это замедляет работу. Да и сам Microsoft не рекомендует использовать ком объект EXCEL в серверных приложениях.

Можно напрямую писать весь документ, лист, в формат Office Open XML, работая как с xml файлом. Но тогда нужно в нем разбираться, понимать, знать. А самое главное поддерживать, вносить изменения, новые разработчики должны тоже уметь и т.д.

В данной статье предлагается простое универсальное решение:

1.Число

Тут все просто.

Если нужно, чтобы при сохранении у ячейки табличного документа, в файле excel было число, делаем так:

Область = ТабличныйДокумент.Область("R1C1:R1C1");
Область.СодержитЗначение = Истина;
Область.ТипЗначения = Новый ОписаниеТипов("Число");
Область.Значение = 2;//Число которое нужно сохранить

 

2. Дата, Дата время.
Тут сложнее, предлагается способ с небольшой пост обработкой стилей xlsx файла, универсальным методом.

Ниже подробнее, по шагам рассмотрим весь способ.

2.1 Формат дата в EXCEL.

На самом деле в EXCEL, на уровне хранения данных, нет понятия даты или времени.

Все хранится как число, обозначающее количество дней с 1 января 1900 г.

Пример:

0 - Пустая дата

1 - 01.01.1900

2 - 02.01.1900

И т.д.

А понимает EXCEL что это дата или время и т.д., с помощью форматных строк.

У ячеек есть понятие формата.

Из пункта 1, мы умеем сохранять формат число , через Табличный документ.

Таким образом реализовав простой метод, который будет конвертировать дату 1С, в число по стандартам EXCEL.

Мы можем в момент формирования Табличного документа, сразу писать xlsx файл как нужно.

И делать это все привычными средствами 1С, пример:
 

ДатаДляЗаписи=Строка(ТекущаяДата());
Область = ТабличныйДокумент.Область("R1C1:R1C1");
Область.СодержитЗначение = Истина;
Область.ТипЗначения = Новый ОписаниеТипов("Число");
Область.Значение = ПреобразоватьДатуСтрокойВФорматEXCEL(ДатаДляЗаписи);//Запишем в файл excel дату в виде числа

 

Остается только указать нужный нам формат даты.

Для этого мы будем использовать Имя шрифта.

Так как оно будет записано в файл стилей, как обычная строка.

При этом мы запомним, какие шрифты, на какие форматы мы заменили, что бы потом обратно сделать подмену.

Дополним наш код выше примером:
 

Формат="dd\.mm\.yyyy\ hh:mm:ss";//Именно в таком формате у нас будет отображаться дата, пользователю. в файле excel,
СоответствиеФорматаИмениШрифта=Новый Соответствие;
СоответствиеФорматаИмениШрифта.Вставить(Формат,Область.Шрифт.Имя);
Область.Шрифт = Новый Шрифт(Область.Шрифт,Формат);


2.2 Универсальное редактирование стилей в файле XLSX.

Все стили у формата Office Open XML хранятся в xl\styles.xml.

После пункта 2.1, наша ячейка будет ссылаться на стиль, который будет записан с именем шрифта, равным нашей форматной строке.

Нам остается лишь:

-Тем стилям которые ссылаются на такой шрифт, указать форматную строку.

-Вернуть корректное имя шрифта.

Это можно обернуть в универсальный метод:

УстановитьФорматДатыВремяУЯчеекЧерезСтили(ПутьДоФайлаXLSX,СоответствиеФорматаИмениШрифта);

Внутри которого реализована модификация xl\styles.xml

 

 

 Под спойлером пример кода, с реализацией всех методов, можно использовать по лицензии MIT.

Для запуска примера можно:

1.Создать внешнюю обработку.

2.Добавить форму, в модуль формы скопировать весь код под спойлером.

3.Добавить команду и на ее вызов повесить СформироватьПример().

4.По пути "C:\Пример.xlsx" будет создан пример xlsx файла из табличного документа, с форматами.

Для удобства можно объявить все как "НаКлиенте".

Цель кода показать пример, сам код каждый может изменить под себя:

 


// Процедура - Извлечь архив ZIPФормата
// Извлекает переданный zip архив в нужную папку
// Параметры:
//  ПутьДоФайлаАрхива	 - Строка - путь до архива который нужно извлечь
//  ПутьКудаИзвлечь		 - Строка - куда нужно извлечь архив 
//
Процедура ИзвлечьАрхивZIPФормата(ПутьДоФайлаАрхива,ПутьКудаИзвлечь) Экспорт
	ДвоичныеДанныеОригинальногоФайла=Новый ДвоичныеДанные(ПутьДоФайлаАрхива);
	Поток = Новый ПотокВПамяти(ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(ДвоичныеДанныеОригинальногоФайла));
	Архив = Новый ЧтениеZipФайла(Поток);
	Архив.ИзвлечьВсе(ПутьКудаИзвлечь, РежимВосстановленияПутейФайловZIP.Восстанавливать);
	Архив.Закрыть();
	Поток.Закрыть();
КонецПроцедуры

// Процедура - Собрать zip архив
// Упаковывает нужную папку в архив
// Параметры:
//  ПутьДоПапапки	 - Строка - Путь до папки которую нужно упаковать
//  ПутьДоФайла		 - Строка - Путь куда нужно собрать архив
//
Процедура СобратьZipАрхив(ПутьДоПапапки,ПутьДоФайла) Экспорт
	АрхивXLSXРезультат = Новый ЗаписьZipФайла(ПутьДоФайла);	
	АрхивXLSXРезультат.Добавить(ПутьДоПапапки+"\*.*", РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно); 	
	АрхивXLSXРезультат.Записать();	
КонецПроцедуры

// Функция - Получить DOMДокумент из XMLФайла
// Возвращает указанный xml файл в виде дом модели
// Параметры:
//  ПутьДоXMLФайла	 - Строка - путь до xml файла который нужно получить как дом документ 
// 
// Возвращаемое значение:
// ДокументDOM  - полученный ДокументDOM
//
Функция ПолучитьDOMДокументИзXMLФайла(ПутьДоXMLФайла) Экспорт
	ЧтениеXML=Новый ЧтениеXML;	
	ЧтениеXML.ОткрытьФайл(ПутьДоXMLФайла);
	
	ПостроительDOM = Новый ПостроительDOM;	
	ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML);
	ЧтениеXML.Закрыть();
	Возврат ДокументDOM;
КонецФункции

// Процедура - Сохранить DOMДокумент КАКXMLФайл
// Сохраняет переданный дом документа, в указанный файл
// Параметры:
//  ДокументDOM		 - ДокументDom - Документ который нужно сохранить 
//  ПутьДоXMLФайла	 - Строка - путь до файла xml в который нужно сохранить 
//
Процедура СохранитьDOMДокументКАКXMLФайл(ДокументDOM,ПутьДоXMLФайла) Экспорт
	ФайлЗаписьXML = Новый ЗаписьXML();
	ФайлЗаписьXML.ОткрытьФайл(ПутьДоXMLФайла);
	//ЗаписьDOM - способ конвертировать созданный ранее XML документ для записи
	ФайлDOM = Новый ЗаписьDOM();
	//производим запись
	ФайлDOM.Записать(ДокументDOM, ФайлЗаписьXML);
	//закрываем файл
	ФайлЗаписьXML.Закрыть();	
КонецПроцедуры

// Функция - Получить соответствие индексов шрифтов для установки формата
// Перебирает раздел шрифтов файла стилей.
// Если в каком то из имен шрифта есть макрос ФЧ тогда будет справа от него взят формат
// А сам макрос с форматной строкой будет удален, что бы шрифт нормально работал
// Пример форматной строки ArialФЧdd\.mm\.yyyy\ hh:mm:ss
// Параметры:
//  ДокументDOM	 - ДокументDOM	- Полученный ДокументDOM файла стилей см метод ПолучитьDOMДокументИзXMLФайла() 
// 
// Возвращаемое значение:
// Соответствие - В котором ключ это индекс шрифта, на который будут ссылаться описание стилей ячеек, а значение это форматная строка которую нужно установит для ячеек 
//
Функция ПолучитьСоответствиеИндексовШрифтовДляУстановкиФормата(ДокументDOM,СоответствиеФорматаИмениШрифта) Экспорт	
	ИндексыШрифтовИФормат=Новый Соответствие;//В этот контейнер их соберем
	СписокЭлементовFont=ДокументDOM.ПолучитьЭлементыПоИмени("font");
	Индкс=-1;
	Для Каждого Font ИЗ СписокЭлементовFont Цикл
		Индкс=Индкс+1;
		
		СписокЭлементовName=Font.ПолучитьЭлементыПоИмени("name");
		Если СписокЭлементовName.Количество()=0 Тогда
			Продолжить;
		КонецЕсли;
		АтрибутVal=СписокЭлементовName[0].Атрибуты.ПолучитьИменованныйЭлемент("val");
		Если АтрибутVal=Неопределено Тогда
			Продолжить;
		КонецЕсли;
		//В имени шрифта передается формат который нужно установить
		Формат=АтрибутVal.ТекстовоеСодержимое;
		//Если он есть в нашем описание, то будем его ставить
		ИмяШрифта=СоответствиеФорматаИмениШрифта.Получить(Формат);
		Если ИмяШрифта=Неопределено Тогда
			Продолжить;
		КонецЕсли;
		//Вернем верное название
		АтрибутVal.ТекстовоеСодержимое=ИмяШрифта;
		//Запомним формат
		ИндексыШрифтовИФормат.Вставить(Индкс,Формат);
	КонецЦикла;
	Возврат ИндексыШрифтовИФормат;
КонецФункции

// Функция - Получить соответствие шрифтов и стилей
// Перебирает в цикле полученный индексы шрифтов, кототорые указаны у тех стилей ячеек,
// у которых нужно изменить ссылку на описание формата числа, ну ту где указан формат даты
// Параметры:
//  ДокументDOM				 - ДокументДом  - дом документа, в который загружен xml описания стилей excel 
//  ИндексыШрифтовИФормат	 - Соответствие - см ПолучитьСоответствиеИндексовШрифтовДляУстановкиФормата()  
// 
// Возвращаемое значение:
// Соответствие - В котором ключ это индкс шрифта, у которого нужно заменить ссылку на форамт числа, ну нужный, который мы добавили
//
Функция ПолучитьСоответствиеШрифтовИСтилей(ДокументDOM,ИндексыШрифтовИФормат) Экспорт
	ИндексыШрифтовИСтилей=Новый Соответствие;
	СписокЭлементовnumFmts=ДокументDOM.ПолучитьЭлементыПоИмени("numFmts");
	Если СписокЭлементовnumFmts.Количество()=0 Тогда
		Возврат ИндексыШрифтовИСтилей;//Что то пошло не так
	КонецЕсли;	
	numFmts=СписокЭлементовnumFmts[0];
	
	//Для поддержки уникальности получим максимальный ид описания формата ячейки
	СписокТекущихЭлементовnumFmt=ДокументDOM.ПолучитьЭлементыПоИмени("numFmts");
	МаксnumFmtId=1;
	Для Каждого numFmt ИЗ СписокТекущихЭлементовnumFmt Цикл
		numFmtId=numFmt.Атрибуты.ПолучитьИменованныйЭлемент("numFmtId");
		Если numFmtId=Неопределено Тогда
			Продолжить;
		КонецЕсли;
		МаксnumFmtId=Макс(Число(numFmtId),МаксnumFmtId);	
	КонецЦикла;
	
	//Обходим наши и добавляем их к текущим со своим индексом уникальным
	//Сохранив эти уникальные индексы в еще один контейнер, который будет результатом этого метода
	Для Каждого ИндксШрифтаИФормат ИЗ ИндексыШрифтовИФормат Цикл
		МаксnumFmtId=МаксnumFmtId+1;//Увеличим для уникальности
		
		//Если не нашли то создадим и добавим в дом модель
		ЭлементDOMnumFmt=ДокументDOM.СоздатьЭлемент("numFmt");
		ЭлементDOMnumFmt.УстановитьАтрибут("numFmtId",СтрЗаменить(МаксnumFmtId,Символы.НПП,""));//Пишем индкс и неразрывный пробел уберем
		ЭлементDOMnumFmt.УстановитьАтрибут("formatCode",ИндксШрифтаИФормат.Значение);//Пишем формат даты, числа
		numFmts.ДобавитьДочерний(ЭлементDOMnumFmt);
	
		//Запомним индкс этого стиля числа
		//Что бы потом проще находить пишем индкс шрифта, по нему будем искать индкс стиля
		ИндексыШрифтовИСтилей.Вставить(ИндксШрифтаИФормат.Ключ,МаксnumFmtId);
	КонецЦикла;
	
	//Обновим верным количеством, незабываем про неразрывный пробел
	numFmts.УстановитьАтрибут("count",СтрЗаменить(numFmts.ДочерниеУзлы.Количество(),Символы.НПП,""));
	
	Возврат ИндексыШрифтовИСтилей;
КонецФункции

// Процедура - Записать у стилей ячеек ссылки на нужные форматы чисел
// Перебирает описание стилей ячеек и подменяет им ссылки на нужные форматы чисел
// Параметры:
//  ДокументDOM				 - ДокументDom - дом документ в который загружен файл стилей ячеек 
//  ИндексыШрифтовИСтилей	 - Соответствие - см ПолучитьСоответствиеШрифтовИСтилей()
//
Процедура ЗаписатьУСтилейЯчеекСсылкиНаНужныеФорматыЧисел(ДокументDOM,ИндексыШрифтовИСтилей) Экспорт
	СписокЭлементовnumcellXfs=ДокументDOM.ПолучитьЭлементыПоИмени("cellXfs");
	Если СписокЭлементовnumcellXfs.Количество()=0 Тогда
		Возврат;//Что то пошло не так
	КонецЕсли;
	
	//Все дочерние стили, получаем и указываем у них ссылки не те форматы числа которые мы выше добавили
	СписокЭлементовnumcellXfsXF=СписокЭлементовnumcellXfs[0].ПолучитьЭлементыПоИмени("xf");
	Для Каждого XF ИЗ СписокЭлементовnumcellXfsXF Цикл
		fontId=XF.ПолучитьАтрибут("fontId");
		Если fontId=Неопределено Тогда
			Продолжить;
		КонецЕсли;
		
		НужныйnumFmtId=ИндексыШрифтовИСтилей.Получить(Число(fontId));
		Если НужныйnumFmtId=Неопределено Тогда
			Продолжить;
		КонецЕсли;
		
		XF.УстановитьАтрибут("numFmtId",СтрЗаменить(НужныйnumFmtId,Символы.НПП,""));
	КонецЦикла;	
КонецПроцедуры

// Процедура - Установить формат даты время у ячеек через стили
// Распаковывает xlsx файл как архив, получает описание стилей ячеек
// Затем среди имен используемых шрифтов находит индексы тех, имена которых есть в ключах СоответствиеФорматаИмениШрифта
// Далее добавляет их как новые описания форматов ячеек
// Затем находит те стили ячеек, которые ссылаются на такой шрифт и меняет им формат на новый, тот который в СоответствиеФорматаИмениШрифта
// Собирает обратно все в архив и перезаписывает переданный xlsx файл
// Параметры:
//  ПутьДоФайлаXLSX					 - Строка - пуолный путь до xlsx файла который нужно подменить 
//  СоответствиеФорматаИмениШрифта	 - Соответствие - соответствие форматов и имен шрифтов которые подменили 
//
Процедура УстановитьФорматДатыВремяУЯчеекЧерезСтили(ПутьДоФайлаXLSX,СоответствиеФорматаИмениШрифта) Экспорт
	//Подготовим папку куда извелкать будем xlsx файл как архив
	ПутьДоПапкиСXML=ПолучитьИмяВременногоФайла()+"\";
	
	//Архив извлечем
	ИзвлечьАрхивZIPФормата(ПутьДоФайлаXLSX,ПутьДоПапкиСXML);
	
	//XML Файл со стилями в Дом Модель преобразуем, для удобной работы
	ПутьДоXMLДокументаСтилей=ПутьДоПапкиСXML + "xl\styles.xml";
	ДокументDOM=ПолучитьDOMДокументИзXMLФайла(ПутьДоXMLДокументаСтилей);
	
	//Определяем индексы шрифтов и формат, которые передали через свойство Шрифт у областей ТабличногоДокумента
	//Которые содержат признак что нужно устанавливать, потом мы будем искать стили ячеек которым присвоим эти шрифты
	ИндексыШрифтовИФормат=ПолучитьСоответствиеИндексовШрифтовДляУстановкиФормата(ДокументDOM,СоответствиеФорматаИмениШрифта);
	
	//Если мы нечего не нашли то тут останавливаемся, почистив за собой папку
	Если ИндексыШрифтовИФормат.Количество()=0 Тогда
		УдалитьФайлы(ПутьДоПапкиСXML);
		Возврат;
	КонецЕсли;
	
	//Теперь добавим их в описание стилей числа, со своими уникальными индексами и получим их Соответствие
	ИндексыШрифтовИСтилей=ПолучитьСоответствиеШрифтовИСтилей(ДокументDOM,ИндексыШрифтовИФормат);
	Если ИндексыШрифтовИСтилей.Количество()=0 Тогда
		УдалитьФайлы(ПутьДоПапкиСXML);
		Возврат;
	КонецЕсли;	
	
	//Теперь последнее, обходим стили ячеек
	//И те которые ссылаются на шрифты, какие мы нашли, обновим их на стили какие мы добавили с переданным форматом
	ЗаписатьУСтилейЯчеекСсылкиНаНужныеФорматыЧисел(ДокументDOM,ИндексыШрифтовИСтилей);
	
	//Сохраним измененный xml
	СохранитьDOMДокументКАКXMLФайл(ДокументDOM,ПутьДоXMLДокументаСтилей);
		
	//Упакуем обратно в XLSX результат и перезапишем изначальный файл
	УдалитьФайлы(ПутьДоФайлаXLSX);
	СобратьZipАрхив(ПутьДоПапкиСXML,ПутьДоФайлаXLSX);
КонецПроцедуры

// Функция - Преобразовать дату строкой в формат EXCEL
// В excel даты храняться числом, по своему внутреннему формату
// Данный метод получает на вход дату, строкой, в 1с формате 23.03.2017 10:45:25, а на выходе строка в формате excel
// Параметры:
//  ДатаСтрокой			 - Строка - дата см Строка(ТекущаяДата()) 
//  ИгнорироватьВремя	 - Булево - если истина, тогда часть времени игноруется, пишется только дата 
// 
// Возвращаемое значение:
// Строка - строка в которой лежит число, преобразованная дата по стандратам excel 
//
Функция ПреобразоватьДатуСтрокойВФорматEXCEL(знач ДатаСтрокой,ИгнорироватьВремя=Ложь) Экспорт
	Результат="";
	Попытка
		врДата=Дата(ДатаСтрокой);
		
		//Все даты хранятся в виде целых чисел, обозначающих количество дней с 1 января 1900 г. (записывается как 1) до 31 декабря 9999 г.
		//(сохраняется как 2958465).
		НачалоВремен=Дата('1900.01.01 00:00:00');
		Если НачалоВремен > врДата Тогда
			врДата = НачалоВремен;			
		КонецЕсли;
		
		РазницаВДнях = (НачалоДня(врДата) - НачалоДня(НачалоВремен)) / (60 * 60 * 24);
		Если РазницаВДнях = 0 Тогда
			Возврат 0;//это пустая дата
		КонецЕсли;
		
		//+2 это пустая дата
		РазницаВДнях = РазницаВДнях +2;
				
		//Дни записываем
		Результат=СтрЗаменить(РазницаВДнях,Символы.НПП,"");
		Если ИгнорироватьВремя Тогда
			//Просто как дату вернем, это полезно например для формата только дата
			Возврат Результат;
		КонецЕсли;
		
		//Время хранится в виде десятичных дробей от 0,0 до 0,99999, которые представляют собой долю дня, где 0,0 - 00:00:00, а 0,99999 - 23:59:59.
		//Например:
		//	0.25 - 06:00
		//	0.5  - 12:00
		//	0.541655093 это 12:59:59
				
		//В секунды время преобразуем, если наша дата не начало дня тогда будем время преобразовывать
		врВремя=СтрРазделить(ДатаСтрокой," ", Ложь);
		Если врВремя.Количество()>1 И НЕ врВремя[1]="00:00:00" Тогда
			врВремя=СтрРазделить(врВремя[1],":", Ложь);
			//Часы в сек
			ВремяВСекундах=Число(врВремя[0])*60*60;
			//Часы в сек + минуты в сек + сами сек
			ВремяВСекундах=ВремяВСекундах+(Число(врВремя[1])*60)+Число(врВремя[2]);
			//Доля в дне получаем
			ДоляВДне=Окр(ВремяВСекундах/86400,9,РежимОкругления.Окр15как20);
					
			//Запишем долю в дне
			Результат=СтрЗаменить(Строка(ДоляВДне),"0,",Результат+".");
		КонецЕсли;	
	Исключение
		ТекстОшибки=ОписаниеОшибки();
		Возврат Неопределено;
	КонецПопытки;
	Возврат Результат;
КонецФункции

Процедура СформироватьПример()
	ТабличныйДокумент=Новый ТабличныйДокумент;
	
	//Контейнер где храним соответствие шрифта - формата
	СоответствиеФорматаИмениШрифта=Новый Соответствие;

	//Первую ячейку делаем обычным число
	Область = ТабличныйДокумент.Область("R1C1:R1C1");
	Область.СодержитЗначение = Истина;
	Область.ТипЗначения = Новый ОписаниеТипов("Число");
	Область.Значение = 2;
	
	//Вторую сделаем датой
	Формат="dd\.mm\.yyyy";
	Область = ТабличныйДокумент.Область("R1C2:R1C2");
	Область.СодержитЗначение = Истина;
	Область.ТипЗначения = Новый ОписаниеТипов("Число");
	Область.Значение = ПреобразоватьДатуСтрокойВФорматEXCEL(Строка(ТекущаяДата()),Истина);
	СоответствиеФорматаИмениШрифта.Вставить(Формат,Область.Шрифт.Имя);
	Область.Шрифт = Новый Шрифт(Область.Шрифт,Формат);
	
	//Эту датой время
	Формат="dd\.mm\.yyyy\ hh:mm:ss";
	Область = ТабличныйДокумент.Область("R1C3:R1C3");
	Область.СодержитЗначение = Истина;
	Область.ТипЗначения = Новый ОписаниеТипов("Число");
	Область.Значение = ПреобразоватьДатуСтрокойВФорматEXCEL(Строка(ТекущаяДата()));
	СоответствиеФорматаИмениШрифта.Вставить(Формат,Область.Шрифт.Имя);
	Область.Шрифт = Новый Шрифт(Область.Шрифт,Формат);
	
	ПутьДоФайлаXLSX="C:\Пример.xlsx";
	ТабличныйДокумент.Записать(ПутьДоФайлаXLSX,ТипФайлаТабличногоДокумента.XLSX);
	
	УстановитьФорматДатыВремяУЯчеекЧерезСтили(ПутьДоФайлаXLSX,СоответствиеФорматаИмениШрифта);
КонецПроцедуры


 

 

Специальные предложения

Оставьте свое сообщение

См. также

Копирование числовых ячеек из 1С в Excel Промо

Загрузка и выгрузка в Excel Инструменты администратора БД v8 1cv8.cf Бесплатно (free)

Решение проблемы, когда значения скопированных ячеек из табличных документов 1С в Excel воспринимаются последним как текст, т.е. без дополнительного форматирования значений невозможно применить арифметические операции. Поводом для публикации послужило понимание того, что целое предприятие с более сотней активных пользователей уже на протяжении года мучилось с такой, казалось бы на первый взгляд, тривиальной проблемой. Варианты решения, предложенные специалистами helpdesk, обслуживающими данное предприятие, а так же многочисленные обсуждения на форумах, только подтвердили убеждение в необходимости описания способа, который позволил мне качественно и быстро справиться с ситуацией.

15.01.2019    39971    itriot11    27    

Создание обработки для выгрузки в Excel, PDF, Docx, TXT (управляемые формы)

Загрузка и выгрузка в Excel Файловые протоколы обмена (TXT, XML, DBF), FTP v8 1cv8.cf Россия Бесплатно (free)

В помощь начинающим программистам. Создание простой обработки для выгрузки табличного документа в файлы различных форматов, на примере справочника Контрагенты (релиз платформы 1С:Предприятие 8.3 (8.3.20.1674), самописная конфигурация).

18.07.2022    751    Pproksima    6    

Выгрузка данных в Excel с добавлением формул (нюансы формирования формул)

Загрузка и выгрузка в Excel Универсальные функции v8 1cv8.cf Бесплатно (free)

Итак, я здесь описываю выгрузку отчета в Excel с добавлением пустых колонок для заполнения внутри самого Excel + колонки с формулами для выполнения расчетов на базе выгруженного и введенного руками в Excel. На самом деле публикация появилась по причине моих проблем, возникших при написании формул. Все остальное вроде штатно, но вдруг кому пригодится.

30.05.2022    1056    Zlohobbit    2    

Выгрузка / Загрузка регистра сведений из внешней системы с большим количеством строк

Загрузка и выгрузка в Excel v8 Бесплатно (free)

Часто возникает задача, когда уже вся НСИ загружена и необходимо перегрузить регистры сведений с большим количеством строк (около миллиона строк). Перегрузка может быть из любой информационной системы (на 1С или нет). Для себя определил максимальной быстрый вариант выгрузки/загрузки - через файл Excel с учетом возможности предварительной правки и просмотра результата загрузки.

28.01.2022    1545    Shining_ninja    4    

Excel vs 1С: битва с неожиданным исходом Промо

Анализ учета Универсальные обработки Загрузка и выгрузка в Excel Финансовые v8 1cv8.cf Россия Бесплатно (free)

Что лучше 1С или Excel? Разберемся, в казалось бы, очевидном, чтобы получить невероятное!

11.04.2019    44384    bolefirenko    123    

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

Загрузка и выгрузка в Excel 8.3.8 Бесплатно (free)

Универсальная обработка по чтению/импорту данных формата Excel в базы 1С.

14.04.2021    9890    artkor    27    

Делаем формат ячейки дата в Excel без Excel

Загрузка и выгрузка в Excel v8 1cv8.cf Бесплатно (free)

Задача отправлять печатную форму в формате Excel, но у этой печатной формы должен быть правильный формат ячеек с датой

26.03.2021    4286    John_d    23    

Генерация кода с помощью формул Excel

Загрузка и выгрузка в Excel v8 Бесплатно (free)

В работе периодически возникает необходимость создания однотипных строк кода, отличающихся, в общем случае, только неким известным заранее строковым содержимым. При помощи конкатенации в Excel подобные данные легко превратить в готовые строки кода.

27.10.2020    1307    aleksei_adamov    6    

Из Excel в 1С запросом Промо

Загрузка и выгрузка в Excel v8 1cv8.cf Бесплатно (free)

... ну, конечно, не прям так типовым языком запросов, а расширенным языком запросов. Речь пойдет о том, как "залить" данные в таблицы 1С и не пилить при этом бесконечного количества наколеночных обработок.

14.08.2018    22781    m-rv    5    

Удаление из файла эксель ненужных страниц средствами 1С без COM и через COM

Загрузка и выгрузка в Excel v8 1cv8.cf Бесплатно (free)

Как средствами 1С из файла эксель удалить ненужные листы без COM и с ним. Я разрабатывал на платформе 1С:Предприятие 8.3 (8.3.14.1694)

28.01.2020    4060    pavel_pss    12    

Обертка функций Excel на русском. Ускорение процесса разработки.

Загрузка и выгрузка в Excel Универсальные функции v8 Бесплатно (free)

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

24.10.2019    8530    DmitryKotov    6    

Выгрузка из 1С номенклатуры со штрихкодами без программирования

Загрузка и выгрузка в Excel Внешние источники данных v8 УТ11 Россия Бесплатно (free)

Я так и не смог найти простой инструкции или обработки, чтобы выгрузить из 1С: Управление торговлей 11 номенклатуру вместе со штрихкодами, поэтому решил написать собственную инструкцию.

28.08.2019    32271    user1114182    12    

Загрузка из EXCEL в 1С на платформе 8.3.6/8.3.7/8.3.8/8.3.9/8.3.10 (с картинками) Промо

Загрузка и выгрузка в Excel v8 1cv8.cf Бесплатно (free)

Импорт содержимого из файлов в форматах XLS (Microsoft Excel 97), Microsoft Office OpenXML (Microsoft Excel 2007- 2010) и ODS (OpenDocument) в таблицу значений.

06.04.2015    281648    StepByStep    76    

Простая работа с dbf и перевод в excel

Загрузка и выгрузка в Excel Файловые протоколы обмена (TXT, XML, DBF), FTP Россия Бесплатно (free)

Хочу рассказать, как просто создать и отредактировать dbf файл, переведя его в excel.

23.08.2019    5540    WWWWW    3    

Почему не получается использовать ТабличныйДокумент для работы с Excel?

Загрузка и выгрузка в Excel v8 Бесплатно (free)

Трудности загрузки/выгрузки эксельных прайсов.

21.06.2019    6995    kuzyara    5    

Загрузка картинок в справочники (Универсальная загрузка из табличного документа)

Обработка справочников Загрузка и выгрузка в Excel v8 1cv8.cf Бесплатно (free)

Пример загрузки картинок в справочник Номенклатура (с помощью обработки универсальная загрузка данных из табличного документа). Проверялось на конфигурации УТ 11.4.7.

28.05.2019    11467    Rasdag    6    

Загрузка из EXCEL в 1С. Чтение файла XLSX средствами 1С. ПостроительDOM Промо

Универсальные обработки Загрузка и выгрузка в Excel Файловые протоколы обмена (TXT, XML, DBF), FTP v8 1cv8.cf Бесплатно (free)

ПРАКТИЧЕСКОЕ ПОСОБИЕ РАЗРАБОТЧИКА: Метод "NativeXLSX" (ПостроительDOM). Обрабатываются данные EXCEL типов: "Строка", "Число", "Дата" ("Время"), "Булево", "Процент", а также изображения.

11.09.2014    82970    StepByStep    27    

Повторение строк заголовка на каждой странице при обработке файлов Excel средствами платформы 1С:Предприятие

Загрузка и выгрузка в Excel v8 Россия Бесплатно (free)

Вопросы повторения строк на каждой странице при работе с файлом Excel из программы, работающей в системе 1С.

23.01.2019    7525    senshkr    3    

Запись одной книги Excel на нескольких листах средствами 1С (без внешних компонент)

Загрузка и выгрузка в Excel v8 1cv8.cf Бесплатно (free)

Пользователи часто просят сохранить им стопиццот отчетов в один файл Excel, чтобы отчеты были в одном файле. Ну или клиент хочет счет, накладную и счет-фактуру получить в одном документе. 1С умеет это делать без всяких там COM-объектов. Давайте разберемся, куда нажимать и что крутить.

14.01.2019    32988    starik-2005    46    

Как легко загружать данные из электронных таблиц (Excel, OpenOffice и т.д)

Загрузка и выгрузка в Excel v8 1cv8.cf Бесплатно (free)

Как легко загружать данные из электронных таблиц (Excel, OpenOffice и т.д). На примере загрузки в табличную часть документа Поступление товаров и услуг в УТ 11.4.

09.01.2019    17626    Rasdag    16    

Загрузка из EXCEL в 1С. MS ADODB.Connection Промо

Загрузка и выгрузка в Excel v8 1cv8.cf Бесплатно (free)

ПРАКТИЧЕСКОЕ ПОСОБИЕ РАЗРАБОТЧИКА: Метод "MS ADODB" (ADODB.Connection). Поддерживаемые типы: *.xls,*.xlsx.

30.11.2012    168798    StepByStep    89    

Работа с Excel через COM

Загрузка и выгрузка в Excel v8 1cv8.cf Бесплатно (free)

Несколько примеров работы с excel (ms office 2010, в моем случае) через COM.

01.10.2018    15851    jaroslav.h    0    

Выгрузка в Excel с использованием формата OpenXML, разбор файла sheet1.xml

Загрузка и выгрузка в Excel v8 1cv8.cf Бесплатно (free)

Судя по количеству просмотров темы https://infostart.ru/public/900022/ решил описать структуру файла Листа excel. На полноту не претендую, опишу то, что знаю.

21.09.2018    9390    user1045404    2    

Excel: создание в формате xlsx без COM технологии

Загрузка и выгрузка в Excel v8 1cv8.cf Бесплатно (free)

По работе приходится часто выгружать данные в Excel формате. При большом количестве строк и формул этот процесс достаточно длительный. Решил написать для своих целей небольшую библиотечку для выгрузки данных. Используется технология open-xml. Никаких библиотек не надо, пишу напрямую в xml файлики. На данном этапе сделано форматирование, формулы.

10.09.2018    13653    user1045404    19    

Вредные советы (загрузка из таблиц Excel) Промо

Загрузка и выгрузка в Excel Россия Бесплатно (free)

Программисты просят вас предоставить данные в xls для загрузки? Обязательно почитайте и проверьте все ли пункты присутствуют в вашем файле.... Иначе загрузка будет скучной и не интересной для них.

01.04.2012    26241    opx    23    

Маркировка ячеек цветом. Отладка загрузки данных из эксель.

Загрузка и выгрузка в Excel v8 1cv8.cf Бесплатно (free)

После 100-ой кривой загрузки родился способ, как отладить алгоритм.

05.07.2018    10423    RustIG    7    

Загрузка из Excel в управляемом приложении

Загрузка и выгрузка в Excel v8::УФ Бесплатно (free)

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

30.11.2017    46559    alex_bitti    17    

Функция сохранения картинок из книги Excel в каталог с определением координат на листе

Загрузка и выгрузка в Excel Универсальные функции v8 Бесплатно (free)

Разбор файла *.xlsx как Web-архива, выгрузка изображений без потери качества, с определением положения изображений.

12.11.2017    11969    user634820_zergemoth    1    

СТАБИЛЬНАЯ Загрузка справочника номенклатуры в 1С:Управление торговлей 8 из прайс-листа в Excel (код открыт скачать можно бесплатно) Промо

Обмен между базами 1C Загрузка и выгрузка в Excel v8 УТ10 Россия Бесплатно (free)

В таких случаях многие заказывают соответствующие обработки у собственных штатных программистов, фирм-франчайзи или сторонних разработчиков, но это дополнительные расходы и время. Как быть, если по различным причинам такой возможности нет? У каждого пользователя профессиональной версии 1С:Предприятие 8 подобная обработка уже есть! На диске ИТС! Типовая обработка «ЗагрузкаДанныхИзТабличногоДокумента.epf», находиться в разделе «Технологическая поддержка» > «Методическая поддержка 1С:Предприятие 8» > «Универсальные отчеты и обработки» > «Загрузка данных из табличного документа». Обратите внимание, начиная с Февраля 2010 г. на диске ИТС данная обработка для конфигураций на платформе 8.1 находится в другом разделе: «Технологическая поддержка» > «Методическая поддержка 1С:Предприятие 8» > «Платформа 1С:Предприятие 8.1» > «Универсальные отчеты и обработки» > «Загрузка данных из табличного документа».

07.11.2011    192522    SkyLink2012    133    

Работа с Excel

Загрузка и выгрузка в Excel v8 Бесплатно (free)

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

23.10.2017    68953    arakelyan    42    

Невалидный XLSX при сохранении Табличного документа

Загрузка и выгрузка в Excel v8 1cv8.cf Бесплатно (free)

Ошибка открытия XLSX файлов, созданных при сохранении Табличного документа. (Невалидный формат файла)

21.10.2017    17169    saddy    3    

Почему при загрузке таблицы Excel в 1С возникают ошибки?

Загрузка и выгрузка в Excel v8 Бесплатно (free)

При загрузке из EXCEL в 1С методом MS ADODB.Connection столкнулся с некоторыми проблемами, которые попытался устранить в ниже приведенной статье. Надеюсь, что статья поможет вам сократить время разработки.  Особая благодарность Андрею М. за публикацию //infostart.ru/public/163640/

28.04.2017    19683    dakork    4    

Две функции Excel, которые "спасут мир" Промо

Загрузка и выгрузка в Excel Универсальные функции Россия Бесплатно (free)

Excel несомненно обладает богатейшим инструментарием по обработке больших массивов информации. Много трудов написано по этой замечательной программе. Я же хочу остановиться на двух практически полезных функциях и их возможном применении при работе с 1С.

15.06.2011    105230    1cspecialist    167    

Загрузка значений свойств номенклатуры в Альфа-Авто с использованием обработки загрузки данных из табличного документа

Загрузка и выгрузка в Excel Склад и ТМЦ v8 1cv8.cf Автомобили, автосервисы Россия УУ Бесплатно (free)

В публикации будет рассмотрено использование встроенной в отраслевую конфигурацию Альфа-Авто обработки по загрузке данных из табличного документа для заполнения значений дополнительных свойств номенклатуры.

13.10.2016    19216    miavolas    16    

Решение проблемы медленной загрузки из файла Excel, защищенного паролем

Загрузка и выгрузка в Excel v8 Россия Бесплатно (free)

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

27.09.2016    11522    HAMMER_59    4    

Сервис для преобразования файла Тинькофф, или моя любовь к phpExcel

Загрузка и выгрузка в Excel WEB Бесплатно (free)

Статья для тех, кому интересно кроссплатформенное чтение и запись Exсel файлов, а также для тех, кто пользуется табличкой Тинькова, чтобы следить за своим ежедневным бюджетом.

19.08.2016    16723    Ibrogim    5    

Как программисту быстро загрузить данные из Excel Промо

Загрузка и выгрузка в Excel v8 1cv8.cf Бесплатно (free)

Встала как-то разовая задача - загрузить данные из Excel в базу... Идея не новая, на ИС имеются уже готовые подобные разработки, но предлагается сделать самостоятельно. Пригодится в будущем.

26.10.2011    26268    DrAku1a    53    

Быстрая выгрузка больших плоских отчетов в Excel

Загрузка и выгрузка в Excel v8 Бесплатно (free)

Предлагаю способ для того, чтобы быстрее выгружать большие плоские отчеты из 1С 8 в Excel, без использования оперативной памяти на сервере и на клиенте, что очень важно, поскольку помогает избежать ошибок вида "Недостаточно памяти на клиенте" или "Недостаточно памяти на сервере". Не использует внешние компоненты. Минусы в том, что отчет выходит неформатированный, приходится настраивать ширину колонок, закрашивать границы, шрифты, жирность и т.п. Но когда отчет, выгружавшийся 3 часа, выгружается 20 минут, эти проблемы мои клиенты считают несущественными.

29.11.2015    19556    matveev.andrey.v    17    

Экспорт нескольких MXL таблиц в один XLS файл, на отдельные листы. Простой алгоритм

Загрузка и выгрузка в Excel Математика и алгоритмы v7.7 v8 Бесплатно (free)

Статья посвящена распространённому вопросу - как сохранить несколько таблиц (отчетов) в формате MXL, с которым работает 1С, на отдельные листы одного Excel файла. Освещается простой алгоритм решения проблемы штатными средствами, без использования внешних модулей и библиотек (не относящихся к 1С и Excel).

23.11.2015    18135    etmarket    14    

Выгрузка таблицы значений в Excel

Загрузка и выгрузка в Excel v8 1cv8.cf Бесплатно (free)

Примитивно, грубо, без дизайна, но очень быстро.

28.06.2015    33146    Yashazz    31    

Скорость закачки с EXCEL при работе с большими файлами

HighLoad оптимизация Загрузка и выгрузка в Excel v8 1cv8.cf Бесплатно (free)

Поставлена задача уменьшить время загрузки данных с EXCEL. Пока ждал ответа от разработчиков ядра, сам начал копать всё, что угодно. ЗАДАЧА решена, с чем спешу поделиться.

09.06.2015    18719    ybatiaev    33    

Чтение из Эксель-файла

Загрузка и выгрузка в Excel v8 1cv8.cf Бесплатно (free)

Некоторые выдержки из моих наработок, связанных с работой 1С и приложений майкрософт-оффис

26.05.2015    11993    mack198109    7    

Вывод таблицы значений в Excel

Загрузка и выгрузка в Excel v8 1cv8.cf Бесплатно (free)

Изложена методика вывода таблицы значений в Excel с помощью именованных ячеек.

21.01.2015    16574    scientes    6    

Хитрости сохранения табличного документа в Excel для дальнейшей работы с ним

Загрузка и выгрузка в Excel v7.7 v8 1cv8.cf 1cv7.md Бесплатно (free)

Все пользователи 1С всех версий (начиная с 7-й) сталкиваются с проблемой нормальной работы с данными, сохраненными в Excel файл. Есть некоторые хитрости, которые позволяют облегчить работу с сохраненными данными из 1С в формат Excel.

16.01.2015    104801    shmellevich    40    

Простой способ программного сохранения больших отчетов из СКД в формат Excel

Универсальные функции Загрузка и выгрузка в Excel v8::СКД 1cv8.cf Бесплатно (free)

Перерыв весь интернет не смог найти простого способа сохранить отчет с большим числом строк в формате Excel. Везде предлагалось писать процедуры построчной записи, ADO, COMSafeArray и прочее. Метод же, используемый во всех найденный публикациях "Результат.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.XLSX)", не работает при большом числе строк. Публикация http://infostart.ru/public/77128/ натолкнула на простую идею, которую и реализовал.

07.08.2014    35411    den_valley    15