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

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

Сохранение табличного документа в 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

 

 

has been added to your cart:
Оформление заказа