SSRS 2008 форматирование даты и экспорт, чтобы превзойти путаницу - PullRequest
7 голосов
/ 05 декабря 2010

Предположим, у меня есть поле со значением даты в шаблоне служб Reporting Services, например, =CDate("2010.12.03"), я применяю формат "d" к этой ячейке, который, согласно описанию, "будет отражать региональные настройки отчета».Я генерирую отчет на английском языке, дата отображается как 12/03/2010, что хорошо.Теперь, когда я экспортирую этот отчет в Excel, я понятия не имею, что происходит _ _.

Первый сценарий: региональные настройки компьютера установлены на английский (США).Когда я открываю документ Excel, в ячейке отображается значение 12/03/2010, как и ожидалось.Когда я нажимаю на нее, я вижу, что фактическое значение, хранящееся в ячейке, равно 2010.12.03, что также кажется разумным - к ячейке применяется некоторое форматирование, а не просто экспортируется как текст.Но когда я пытаюсь выяснить, какой тип форматирования применяется, щелкнув правой кнопкой мыши и выбрав Формат ячеек, я вижу, что формат «Общий», то есть ни один!Как это может быть ?Кстати, это Excel 2010, но сам файл, разумеется, .xls.

Второй сценарий, где он становится более интересным: теперь для региона компьютера установлено, например, Литва, где формат датыэто 2010.12.03.Я открываю тот же документ и вижу 12.03.2010.Теперь это просто не имеет никакого смысла.Экспортируя много раз, я сталкивался с тем, что иногда ячейка форматируется как [$-10409]m.d.yyyy в Excel (в разделе Custom).Что это такое, что означает 10409?Самая странная часть из всех: если я закрою документ без сохранения, вернем компьютерный регион на английский (США), снова открою документ, формат теперь [$-10409]m/d/yyyy!КАК это возможно! ??

В основном то же самое происходит с числами и разделителями тысяч / десятичных дробей - Excel использует для форматирования их область компьютера, но фактический формат ячейки может быть примерно таким: [$-10409]#,##0.00;-#,##0.00 или Общее - опять же, в зависимости от региона компьютера, направления ветра и температуры снаружи.

Мой вопрос, прежде всего, о том, что происходит с _ _на?Во-вторых, как должен вести себя документ Excel в соответствии со спецификациями, т. Е. Что означает утверждение о том, что формат «будет отражать региональные настройки отчета» в проекте BIDS, где я выбрал формат «d» для текстового поля даты.?Означает ли это, что формат будет определяться языком отчета, и результат будет выглядеть одинаково на всех компьютерах в мире (что имеет смысл, поскольку именно так ведут себя другие форматы, т.е. если вы экспортируете дату вpdf, он всегда один и тот же)?Если нет, то, как представляется, частично в Excel, почему экспортируемая ячейка даты не имеет регионального формата даты, то есть того, который вы обычно используете в Excel, который форматирует дату в соответствии с регионом компьютера?

Это какие-то ограничения Excel или что?Почему у нас не может быть последовательного поведения, то есть либо сделать все чувствительным к культуре компьютера, просматривающего документ, или нет, почему фактическое поведение где-то посередине?

Ответы [ 2 ]

2 голосов
/ 14 декабря 2010

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

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

В прошлом у меня был некоторый успех: экспорт дат в виде строк в файл CSV, без форматирования, а затем импорт их в Excel / открытие их в Excel.

0 голосов
/ 21 февраля 2011

Я отсортировал проблему форматирования даты по:

  1. , добавив вычисляемые поля для дат:

    =IIF(IsNothing(Fields!Date_Delivery_Confirmed.Value),nothing,DateSerial(DatePart("yyyy",Fields!Date_Delivery_Confirmed.Value), DatePart("m",Fields!Date_Delivery_Confirmed.Value),DatePart("d",Fields!Date_Delivery_Confirmed.Value)))
    
  2. установить текстовое поле ячейки как формат даты

  3. как я использую * dateformats (локализовано) Я проверил, что мой серверный ноутбук и отчет настроены на правильный язык

  4. Я выровнял элементывертикально в отчете, чтобы он (визуальные пробелы) не создавал лишних пустых столбцов при экспорте в excel.Поскольку 2 столбца Excel, объединенные в 1 ячейку даты, никогда не получат никакого формата, кроме «Общий формат»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...