【问题标题】:Why the date is coming like 434242 instead of proper date after exporting to excel?为什么导出到 excel 后日期像 434242 而不是正确日期?
【发布时间】:2019-12-18 10:41:10
【问题描述】:

我正在使用它来生成报告并将其导出到 excel。

ALTER PROCEDURE [dbo].[USP_DaysReport]  
        @Week int= 50,
        @Year int= 2019  
AS
BEGIN  
    Declare @YearText varchar(4)
    Set @YearText = @Year

    Select Emp_ID 'EmployeeID', Employee_name EmployeeName, Week, Year,
        [ProjectName], [SubProject], Convert(datetime, Convert(varchar(11),
        Case 
            when EachDay= 'Mon' then
            dateadd(day,2 - datepart(dw, @YearText + '-01-01')
                    + (@Week-1) * 7
                    ,@YearText + '-01-01')  
            when EachDay= 'Tue' then
            dateadd(day,3 - datepart(dw, @YearText + '-01-01')
                        + (@Week-1) * 7
                        ,@YearText + '-01-01')  
        end), 103) 'Day', Hours
    from [dbo].[TimeSheet_Child] 
    Inner Join 
    (
        Select TimeID as TID, Employee_name, Week, Year, Emp_ID from [dbo].[TimeSheet_Master]
    ) tm
    ON tm.TID= [dbo].[TimeSheet_Child].TimeID
    unpivot
    (
      Hours
      for EachDay in ([Mon], [Tue])
    ) u
END

vb.net 代码:

ExcelLibrary.DataSetHelper.CreateWorkbook(Server.MapPath("~/Downloads/DailyEmployeeReport.xls"), DataSetDays)

现在它工作得很好,除了一件事,即它导出到 excel 的日期,即日期字段就像这样 413122、423112 等,所以我必须在 excel 中格式化该字段。

【问题讨论】:

    标签: sql .net vb.net tsql excellibrary


    【解决方案1】:

    问题在于 Excel 接收日期并将其显示为数字。您可以在 Excel 文件中进行更改,也可以将此列中的值导出到带有愚蠢前缀的 Excel。我敢打赌,当您将日期值转换为 varchar 并在其前面加上例如 'abc' 时,一切正常。

    就个人而言,我会选择更改 Excel 文件。您还可以附加到文件。因此,如果您创建一个包含非日期列的模板,您可以在每次需要导出数据时从中复制一份。

    【讨论】:

    • 你能解释一下前缀的东西吗?
    • 'abc' + convert(varchar(50), dateadd(day,2 - datepart(dw, @YearText + '-01-01') + (@Week -1) * 7,@YearText + '-01-01'))
    【解决方案2】:
    Public Shared Function FromExcelSerialDate(ByVal SerialDate As Integer) As DateTime
        If SerialDate > 59 Then SerialDate -= 1 ''// Excel/Lotus 2/29/1900 bug
        Return New DateTime(1899, 12, 30).AddDays(SerialDate)
    End Function
    

    将此函数添加到您的代码中。

    【讨论】:

    • 我已经说过了。我不想要那个。我希望程序像那样导出它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 2019-11-24
    • 1970-01-01
    相关资源
    最近更新 更多