SSRS 2008日期格式化和导出到excel混乱

时间:2010-12-05 11:06:59

标签: reporting-services ssrs-2008

假设我在Reporting Services模板中有一个带日期值的字段,例如=CDate("2010.12.03"),我将“d”格式应用于此单元格,根据说明,“将反映报告的区域设置”。我使用英语生成报告,日期显示为12/03/2010,这很好。现在,当我将此报告导出为ex​​cel时,我不知道 _ _会发生什么。

第一种情况:计算机的区域设置设置为英语(美国)。当我打开excel文档时,单元格中显示的值为12/03/2010,如预期的那样。当我点击它时,我可以看到存储在单元格中的实际值是2010.12.03,这似乎也是合理的 - 一些格式应用于单元格,它不是简单地导出为文本。但是当我试图找出应用了什么类型的格式时,通过右键单击并检查格式单元格,我看到格式是“常规”,即没有!怎么会这样 ?顺便说一下,这是Excel 2010,但文件本身当然是.xls。

第二种情况,它变得更有趣:现在计算机的区域设置为例如立陶宛,日期格式为2010.12.03。我打开同一个文档并查看12.03.2010。现在这根本没有任何意义。导出很多次我遇到过,有时单元格在excel中被格式化为[$-10409]m.d.yyyy(在“自定义”部分下)。这是什么,10409是什么意思?最奇怪的部分:如果我关闭文档而不保存,将计算机区域更改回英语(美国),重新打开文档,格式现在为[$-10409]m/d/yyyy!这怎么可能!??

基本上同样的事情发生在数字和千位/小数分隔符上 - excel使用计算机的区域来格式化这些,但是单元格的实际格式可能类似[$-10409]#,##0.00;-#,##0.00或一般 - 依赖于在计算机的区域,风的方向和外面的温度。

我的问题是,首先, _ _正在进行什么?第二,excel文档应该如何根据规范行事,即在BIDS设计的格式“将反映报告的区域设置”的声明是什么,我选择了日期文本框的“d”格式,意思是?这是否意味着,格式将由报告的语言决定,结果在世界上所有计算机上看起来都是一样的(这是有道理的,因为这是其他格式的行为,即如果您将日期导出到pdf,它始终保持不变)?如果不是,这在excel中似乎是部分情况,为什么导出的日期单元格不具有区域日期格式,即您通常在excel中使用的格式,即根据计算机区域格式化日期的日期格式?

这些是excel的某种限制还是什么?为什么我们不能有一致的行为,即要么使一切都对查看文档的计算机文化敏感,要么不这样做,为什么实际行为介于两者之间?

2 个答案:

答案 0 :(得分:2)

Excel对日期使用自定义编码,并使用计算机区域设置作为如何格式化内容的提示。编码过时,并且具有许多具体的历史问题。

这意味着您经常看到的错误类型 - 您将拥有导出到Excel的数据,然后在实际的Excel应用程序首次打开后,其格式和内容会被破坏。这个问题可能出现在任何地方 - 也许将数据导出到Excel的图书馆并没有很好地处理一些更为深奥的历史案例,或者Excel可能会让您感到困惑。

我过去曾成功将日期作为字符串导出到CSV文件,去除格式,然后将它们导入Excel /用Excel打开它们。

答案 1 :(得分:0)

我通过以下方式对日期格式问题进行了排序:

  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. 将单元格文本框设置为dateformat

  3. 我如何使用* dateformats(本地化)我检查了我的服务器笔记本电脑并将报告设置为正确的语言

  4. 我在报表中垂直对齐元素,因此在导出到Excel时,它(视觉间隙)不会创建额外的空列。因为合并到1个日期单元格的2个excel列将永远不会获得任何格式,但“常规格式”