导出到excel时s-s-rs不保持格式

Posted

技术标签:

【中文标题】导出到excel时s-s-rs不保持格式【英文标题】:s-s-rs not keeping format when exported to excel 【发布时间】:2015-03-12 06:45:11 【问题描述】:

我有一个 s-s-rs 报告,其中一个字段作为日期列(来自 db 的值是 varchar)。但是当我导出到 excel 时,它不会保留日期格式。我尝试在表达式中使用 Cdate,格式化日期函数,还尝试将数字中的文本框属性更改为 date。当我右键单击并检查该单元格的格式时,如何确保我获得日期格式。数据很好。使用上述功能时,其显示格式为通用格式或自定义格式

【问题讨论】:

【参考方案1】:

更改您的数据源查询,以便将 varchar 日期转换为日期

例如 Convert(datetime, MyDate, 103) 103 假定日期为 DD/MM/YY 格式

您也可以尝试使用日期序列功能

=DateSerial(Cint(Right(mydate(4))), Cint(Mid(mydate(4),4,2)), Cint(Left(mydate,2)))

mydate 是您的日期字段值,再次假定日期为 dd/mm/yyyy 格式

【讨论】:

【参考方案2】:

如果整个数据集中的日期格式一致,最简单的方法是在 SQL 查询中使用 CONVERT() 函数。 CONVERT() 采用可选的第三个参数,指定源数据所在的样式。样式告诉函数如何准确转换可能采用多种形式(如日期和时间)的值。此处列出的代码太多,因此请查看下面链接的 MSDN 页面以查看所有代码。

例如,如果您的日期以DD/MM/YY 格式存储,那么您将使用代码 3。然后您可以像这样转换它:

SELECT CONVERT(DATE, DateField1, 3) AS dt
FROM tbl

但是,如果您的日期不一致,事情就会变得有点复杂。您需要查看那里会出现哪些类型的值,看看是否有任何方法可以通过编程方式识别它们。

一个更复杂的例子是,有时日期是DD/MM/YY,有时是DD-MM-YY。此外,有时它是四位数的年份而不是两位数的年份,您会在 MSDN 页面上注意到这是一个不同的样式代码。 (四位数年份通常是两位数年份的代码加 100。)

您可以使用 case 语句和 LIKE 模式匹配将它们全部转换为日期。

SELECT CASE
        WHEN DateField1 LIKE '__/__/____' THEN CONVERT (DATE, DateField1, 103)
        WHEN DateField1 LIKE '__/__/__' THEN CONVERT(DATE, DateField1, 3)
        WHEN DateField1 LIKE '__-__-____' THEN CONVERT(DATE, DateField1, 105)
        WHEN DateField1 LIKE '__-__-__' THEN CONVERT(DATE, DateField1, 5)
    END AS dt
FROM tbl

这些模式与日期或月份只有一位数的日期不匹配,并且上面的代码可能无法解决您的问题。你需要看看你的数据是什么样子,然后写一点 SQL 来把它变成正确的格式。

真的,设计数据库的人不应该将日期放在字符串数据类型中......但有时你只需要使用你所拥有的。

我一直在谈论的参考:

MSDN - CAST and CONVERT (Transact-SQL) MSDN - CASE (Transact-SQL) MSDN - LIKE (Transact-SQL)

【讨论】:

以上是关于导出到excel时s-s-rs不保持格式的主要内容,如果未能解决你的问题,请参考以下文章

导出到 Excel 时,s-s-rS 表达式不会格式化为数字

从 s-s-rs 导出到 excel 时无法维护日期格式

导出到 excel 时 s-s-rS 报告颜色发生变化

s-s-rS 报告导出为 PDF、EXCEL 和 MS-Word 格式问题

s-s-rS:报告导出到 excel,不包括特定列

在 s-s-rS 中将报告导出到 Excel