Reporting services SSRS 2008日期格式化和导出到excel

Reporting services SSRS 2008日期格式化和导出到excel,reporting-services,ssrs-2008,Reporting Services,Ssrs 2008,假设我在Reporting Services模板中有一个带有日期值的字段,例如=CDate(“2010.12.03”),我将“d”格式应用于此单元格,根据描述,“将反映报告的区域设置”。我使用英语生成报告,日期显示为12/03/2010,这很好。现在,当我将此报告导出到excel时,我不知道会发生什么 第一种情况:计算机的区域设置设置为英语(美国)。当我打开excel文档时,在单元格中看到的值是12/03/2010,正如预期的那样。当我点击它时,我可以看到存储在单元格中的实际值是2010.12.

假设我在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
。现在这根本没有任何意义。我多次在导出时遇到这样的情况:有时单元格在excel中的格式为
[$-10409]m.d.yyyy
(在“自定义”部分下)。这是什么,10409是什么意思?最奇怪的是:如果我关闭文档而不保存,将计算机区域更改回英语(美国),重新打开文档,格式现在是
[$-10409]m/d/yyyy
!这怎么可能

基本上,数字和千位/十进制分隔符也会发生同样的情况-excel使用计算机的区域对这些分隔符进行格式化,但单元格的实际格式可能类似于
[$-10409]、#0.00;-###0.00
或常规-同样,取决于计算机所在区域、风向和外部温度

我的问题是,首先,到底发生了什么?其次,excel文档应如何根据规范进行操作,即在设计的标书中,我选择了日期文本框的“d”格式,该格式“将反映报告的区域设置”是什么意思?这是否意味着,格式将由报告的语言决定,并且结果在世界上所有计算机上看起来都一样(这是有意义的,因为这是其他格式的行为方式,即,如果将日期导出为pdf,它将始终保持不变)?如果不是,在excel中似乎部分是这样,为什么导出的日期单元格没有区域日期格式,即excel中通常使用的格式,即根据计算机区域设置日期格式的格式


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

Excel对日期使用自定义编码,并使用机器区域设置作为如何格式化内容的提示。编码是古老的,有很多特定的、历史性的陷阱

这意味着您经常看到的各种错误确实会发生—您将有已导出到Excel的数据,一旦实际Excel应用程序第一次打开,这些数据的格式和内容就会被破坏。问题可能在这条路线上的任何地方——可能将数据导出到Excel的库没有很好地处理一些更深奥的历史案例,或者Excel在处理过程中混淆了自己


过去,我曾成功地将日期作为字符串导出到CSV文件,去掉格式,然后将其导入Excel/用Excel打开。我通过以下方式解决了日期格式问题:

  • 为日期添加计算字段:

    =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)))
    
  • 将单元格文本框设置为日期格式

  • 如何使用*日期格式(本地化)我检查了我的服务器笔记本电脑,并将报告设置为正确的语言

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