Особенности форматирования данных для Excel отчетов

3 6

Всем, кто работает с Excel, приходилось встречаться с автоматическим преобразованием вводимых данных в различные форматы. Например, если в ячейке набрать значение «01-3936», то оно автоматически преобразуется в Дату, а при вводе значения «52%» - формат ячейки автоматически станет «Процентный».

Конечно, в некоторых случаях, это очень удобный механизм, но иногда, авто-преобразование формата, мягко говоря, мешает работать. И для того, чтобы «отключить» последствия авто-преобразования при вводе данных в таблице Excel, приходится  изменять формат ячеек вручную, или использовать пункт меню «специальная вставка».

Авто-преобразование формата данных срабатывает и при формировании Excel отчетов в DIRECTUM. Это значит, что если вы формируете сводную таблицу по документам или записям справочника, и при этом формат номеров документов или записей справочников у вас такой, который Excel может воспринимать как подходящий для авто-преобразования, например в дату, то в отчет попадут некорректные данные:

Пример исходных данных для отчета, которые могут быть распознаны как Дата:

01-3936
01/5
3.3.1

Чтобы выйти из этой ситуации, и увидеть в отчете данные, именно в том формате, в котором мы их передаем, следует модифицировать расчет отчета так, чтобы исходные данные поступали в формате, в котором Excel не будет применять автоматическое преобразование.

Обычно, выборка данных для отчета, получается с помощью SQL-запроса к БД DIRECTUM. В нашей ситуации, следует модифицировать SQL запрос таким образом, чтобы результат имел следующий формат:
="<значение>"

Пример SQL запроса на языке ISBL:

StrStart = '="'
StrEnd  =  '"'
QuerySQL = "Select '" & StrStart & "' + dop3 + '" & StrEnd & "' From MBAnalit
                Where dop3 ='01-3936' or dop3 ='01/5' or dop3 ='3.3.1'"  
SQL(QuerySQL)

После обработки IS-Builder запрос будет выглядеть так:

Select '="' + dop3 + '"'
From MBAnalit
Where dop3 ='01-3936' or dop3 ='01/5' or dop3 ='3.3.1'


Примеры возвращаемых значений:



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

 

 

3
Авторизуйтесь, чтобы оценить материал.
1
Антон ИСУПОВ

чтобы результат имел следующий формат: ="<значение>"
в данном случае результат выборки приводится к формуле Excel, которая оформляет  результат как строку. Есть средство проще: начать строку с апострофа. Результат, практически тот-же. Различие в том, что в приеме Петра, Excel однозначно возвращает результат в виде строки, в случае с апострофом остается возможность преобразовать формат к "правильному". Например, "=0.5" - только строка, '0.5 - появляется предупреждение о том, что "число сохранено как строка" и есть возможность преобразовать значение к числовому типу (проверено на Excel2007).
Евгений Кочуров

А что будет, если поле dop3 содержит символ <">?
 

Мохаммед Богданов

Не рекомендуется использовать оператор OR в запросах SQL. Данный оператор снижает производительности, поэтому рекомендую изменить на следующий запрос:

Select'="' + dop3 + '"'

FromMBAnalit

Where dop3 IN ('01-3936','01/5','3.3.1')

Андрей Верещагин

Стоит отметить, что при преобразовании данных из столбца Рег.номер в Общий формат уже в самом Excel'е вместо даты в поле отображается строка из цифр составляющих количество дней от начала 20 века до той даты, которая в ячейке, а это уже совсем не те данные, которые требуются.

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

 

Например, "=0.5" - только строка, '0.5 - появляется предупреждение о том, что "число сохранено как строка" и есть возможность преобразовать значение к числовому типу (проверено на Excel2007).

Этот вариант рассматривался, но это действует только при работе с данными через сам Excel, а при передачи данных из Directum'а данные воспринимаются как строка и апостроф остается виден и выбор формата уже не предоставляется.

Алексей Зиновьев

Согласен c Антоном Исуповым, считаю что использование апострофа выгоднее, при этом Excel не занимается пересчетом формул и пользователь может менять формат значения по-своему усмотрению.

Мохаммед Гомаа, пруфлинк дайте плиз.

Алексей Язынин

Использовал описанный Петром метод для построения таблицы данных сводной таблицы. Таблица данных сформировалась, все хорошо. А вот в самой таблице, где на основании этих данных считалось "среднее" - полезли ошибки типа "Деление на 0". Мой вывод - данный способ для сводных таблиц использовать нельзя.

В моем случае вопрос решился использованием стандатрой функции SQL2XlsTab. Она корректно заменила разделяющую точку на запятую и дробные числа Excel воспринял правильно.

Авторизуйтесь, чтобы написать комментарий