1

我正在使用它来生成报告并将其导出到 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 的日期,即 Day 字段就像这样 413122、423112 等,所以我必须在 excel 中格式化该字段。

4

2 回答 2

1

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

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

于 2019-12-21T13:30:59.580 回答
0
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

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

于 2019-12-18T10:56:48.963 回答