2010-12-05 27 views
7

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

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

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

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

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

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

回答

2

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

这意味着您看到的各种错误经常发生 - 您将会将数据导出到Excel,然后格式化和内容首次由实际的Excel应用程序打开时被破坏。这个问题可能在任何地方 - 也许将数据导出到Excel的库不能很好地处理一些更深奥的历史案例,或者Excel可能会一直困惑自己。

我已经取得了一些成功,将日期作为字符串导出到CSV文件,并将其格式化,然后将其导入到Excel中/使用Excel打开它们。

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. 集小区文本框的日期格式

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

  4. 我在报告中垂直排列了元素,因此它在输出为excel时不会创建额外的空列。因为2个excel列合并到1个日期单元格将永远不会获得任何格式,但“通用格式”