Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我想下载一个Excel文件,基于mvc中的一些sql_C#_Asp.net Mvc_Excel_Asp.net Mvc 5 - Fatal编程技术网

C# 我想下载一个Excel文件,基于mvc中的一些sql

C# 我想下载一个Excel文件,基于mvc中的一些sql,c#,asp.net-mvc,excel,asp.net-mvc-5,C#,Asp.net Mvc,Excel,Asp.net Mvc 5,我正在做一个类项目,我正在尝试实现一个简单的工资流程,用户输入开始日期和结束日期,然后点击获取报告,然后下载Excel文件。我还是ASP.NETMVC新手,我发现一些代码可以下载,但不是我所期望的 这是我的简单观点 @model IEnumerable<RazorCab.Models.Payroll> @{ ViewBag.Title = "Index"; string strMessage = ViewBag.Message; } <h2>Payro

我正在做一个类项目,我正在尝试实现一个简单的工资流程,用户输入开始日期和结束日期,然后点击获取报告,然后下载Excel文件。我还是ASP.NETMVC新手,我发现一些代码可以下载,但不是我所期望的

这是我的简单观点

@model IEnumerable<RazorCab.Models.Payroll>
@{
    ViewBag.Title = "Index";

   string strMessage = ViewBag.Message; 
}

<h2>Payroll</h2>
@using (Html.BeginForm("Index", "Payrolls", FormMethod.Get))
{
 <table>
<tr>
      <td>Select Dates:</td>
      <td><input type="date" name="dteStartDate" id="dteStartDate"       placeholder="YYYY/MM/DD" /></td>
    <td>To</td>
    <td><input type="date" name="dteEndDate" id="dteEndDate" placeholder="YYYY/MM/DD" /></td>
</tr>
<tr>
    <td><input type="submit" value="Get Report" /></td>
</tr>
@if (strMessage != "")
{
 <tr>
<td><p>@strMessage</p></td>
</tr>
}
</table>
}
这是我的模型:

public class Payroll
{
    public int EmplID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public decimal Wage { get; set; }
    public DateTime ClockInTime { get; set; }
    public DateTime? ClockOutTime { get; set; }
    public int HoursWorked { get; set; }
    public decimal DailyEarnings { get; set; }
}

任何帮助都将不胜感激,我查找了控制器代码,它对执行此操作的人来说运行良好,但我不确定我做错了什么。

我最终实现了Epplus,我删除了该代码,并在控制器中编写了此代码。除了我的日期在excel中被转换为序列号之外,所有代码都正常工作,所以我想这就是为什么我对日期的计算不正确的原因工作有人知道如何使我的日期格式正确吗

 public ActionResult Index(DateTime? dteStartDate, DateTime? dteEndDate)
    {

        if (dteStartDate != null && dteEndDate != null)
           {

                //var @StartDate = new SqlParameter("@StartDate", dteEndDate);
               // var @EndDate = new SqlParameter("@EndDate", dteEndDate);


            string query = "SELECT E.EMPLID, E.FIRSTNAME, E.LASTNAME, E.WAGE, H.CLOCKINTIME, H.CLOCKOUTTIME, DATEDIFF(HOUR, H.CLOCKINTIME, H.CLOCKOUTTIME) AS HOURS_WORKED, E.WAGE * DATEDIFF(HOUR, H.CLOCKINTIME, H.CLOCKOUTTIME) AS DAILY_EARNINGS "
                + "FROM EMPLOYEE E "
                + "JOIN HOURLYWAGEMGMT H "
                + "ON H.EMPLID = E.EMPLID "
                + "WHERE E.POSITION = 'Driver' "
                + "AND H.CLOCKINDATE BETWEEN '" + dteStartDate + "' AND '" + dteEndDate + "' "
                + "AND H.CLOCKOUTDATE BETWEEN '" + dteStartDate + "' AND '" + dteEndDate + "' ";




            var data = db.Database.SqlQuery<Payroll>(query);
            var pck = new OfficeOpenXml.ExcelPackage();
            var ws = pck.Workbook.Worksheets.Add("Payroll");
            ws.Cells["A2"].LoadFromCollection(data, false);
            ws.Cells["A1"].Value = "EmployeeID";
            ws.Cells["B1"].Value = "FirstName";
            ws.Cells["C1"].Value = "LastName";
            ws.Cells["D1"].Value = "Wage";
            ws.Cells["E1"].Value = "ClockInTime";
            ws.Cells["F1"].Value = "ClockOutTime";
            ws.Cells["G1"].Value = "HoursWorked";
            ws.Cells["H1"].Value = "DailyEarnings";

            using (ExcelRange rng = ws.Cells["A1:H1"])
            {
                rng.Style.Font.Bold = true;
                rng.Style.Fill.PatternType = ExcelFillStyle.Solid;
                rng.Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.FromArgb(79, 129, 189));
                rng.Style.Font.Color.SetColor(System.Drawing.Color.White);
            }
            Response.Clear();
            Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            Response.AddHeader("content-disposition", "attachment;  filename=Payroll.xlsx");
            Response.BinaryWrite(pck.GetAsByteArray());


        Response.End();

        return View();

         }
        else
        {
          return View();
         }
    }
}
public ActionResult索引(DateTime?dteStartDate,DateTime?dteendate)
{
if(dteStartDate!=null&&dteEndDate!=null)
{
//var@StartDate=新的SqlParameter(“@StartDate”,dteEndDate);
//var@EndDate=新的SqlParameter(“@EndDate”,dteEndDate);
string query=“选择E.EMPLID、E.FIRSTNAME、E.LASTNAME、E.WAGE、H.CLOCKINTIME、H.CLOCKOUTTIME、DATEDIFF(小时、H.CLOCKINTIME、H.CLOCKOUTTIME)作为工作时间,E.WAGE*DATEDIFF(小时、H.CLOCKINTIME、H.CLOCKOUTTIME)作为每日收入”
+“来自员工E”
+“加入小时管理”
+“在H.EMPLID=E.EMPLID上”
+“其中E.POSITION=‘Driver’”
+“和H.CLOCKINDATE介于“+dteStartDate+”和“+DTeenDate+”之间”
+“和H.CLOCKOUTDATE介于“+dteStartDate+”和“+dteEndDate+””;
var data=db.Database.SqlQuery(查询);
var pck=newOfficeOpenXML.ExcelPackage();
var ws=pck.Workbook.Worksheets.Add(“工资单”);
ws.Cells[“A2”].LoadFromCollection(数据,false);
ws.Cells[“A1”].Value=“EmployeeID”;
ws.Cells[“B1”].Value=“FirstName”;
ws.Cells[“C1”].Value=“LastName”;
ws.Cells[“D1”].Value=“工资”;
ws.Cells[“E1”].Value=“ClockInTime”;
ws.Cells[“F1”].Value=“ClockOutTime”;
ws.Cells[“G1”].Value=“HoursWorked”;
ws.Cells[“H1”].Value=“每日收益”;
使用(ExcelRange rng=ws.Cells[“A1:H1”])
{
rng.Style.Font.Bold=true;
rng.Style.Fill.PatternType=ExcelFillStyle.Solid;
rng.Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.FromArgb(79129189));
rng.Style.Font.Color.SetColor(System.Drawing.Color.White);
}
Response.Clear();
Response.ContentType=“application/vnd.openxmlformats officedocument.spreadsheetml.sheet”;
AddHeader(“内容处置”、“附件;文件名=Payroll.xlsx”);
BinaryWrite(pck.GetAsByteArray());
Response.End();
返回视图();
}
其他的
{
返回视图();
}
}
}
}

 public ActionResult Index(DateTime? dteStartDate, DateTime? dteEndDate)
    {

        if (dteStartDate != null && dteEndDate != null)
           {

                //var @StartDate = new SqlParameter("@StartDate", dteEndDate);
               // var @EndDate = new SqlParameter("@EndDate", dteEndDate);


            string query = "SELECT E.EMPLID, E.FIRSTNAME, E.LASTNAME, E.WAGE, H.CLOCKINTIME, H.CLOCKOUTTIME, DATEDIFF(HOUR, H.CLOCKINTIME, H.CLOCKOUTTIME) AS HOURS_WORKED, E.WAGE * DATEDIFF(HOUR, H.CLOCKINTIME, H.CLOCKOUTTIME) AS DAILY_EARNINGS "
                + "FROM EMPLOYEE E "
                + "JOIN HOURLYWAGEMGMT H "
                + "ON H.EMPLID = E.EMPLID "
                + "WHERE E.POSITION = 'Driver' "
                + "AND H.CLOCKINDATE BETWEEN '" + dteStartDate + "' AND '" + dteEndDate + "' "
                + "AND H.CLOCKOUTDATE BETWEEN '" + dteStartDate + "' AND '" + dteEndDate + "' ";




            var data = db.Database.SqlQuery<Payroll>(query);
            var pck = new OfficeOpenXml.ExcelPackage();
            var ws = pck.Workbook.Worksheets.Add("Payroll");
            ws.Cells["A2"].LoadFromCollection(data, false);
            ws.Cells["A1"].Value = "EmployeeID";
            ws.Cells["B1"].Value = "FirstName";
            ws.Cells["C1"].Value = "LastName";
            ws.Cells["D1"].Value = "Wage";
            ws.Cells["E1"].Value = "ClockInTime";
            ws.Cells["F1"].Value = "ClockOutTime";
            ws.Cells["G1"].Value = "HoursWorked";
            ws.Cells["H1"].Value = "DailyEarnings";

            using (ExcelRange rng = ws.Cells["A1:H1"])
            {
                rng.Style.Font.Bold = true;
                rng.Style.Fill.PatternType = ExcelFillStyle.Solid;
                rng.Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.FromArgb(79, 129, 189));
                rng.Style.Font.Color.SetColor(System.Drawing.Color.White);
            }
            Response.Clear();
            Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            Response.AddHeader("content-disposition", "attachment;  filename=Payroll.xlsx");
            Response.BinaryWrite(pck.GetAsByteArray());


        Response.End();

        return View();

         }
        else
        {
          return View();
         }
    }
}