MVC 导出excel

大致的方式没有差异 都是在后台进行整合 DataTable =>foreach =>下载

现在有两种下载方式

1.利用MVC里面的 return File() 进行下载 (如果数据多久执行反馈会慢或者是卡死)

 public ActionResult ExploreExcel(string TimeBeg, string TimeEnd, int page = 1)
        {

            var list = new PayStatBLL().GetPayStat(TimeBeg, Convert.ToDateTime(TimeEnd).AddDays(1).ToString(), page, pagesize, ref counts).ToPagedList<PayStat>(page, pagesize);
            StringBuilder sbhtml = new StringBuilder();
            sbhtml.Append(" <table  border='1' cellspacing='0' cellpadding='0'>");
            sbhtml.Append("<tr><td>日期</th><th>网银</th><th>ios</th><th>支付宝</th><th>微信</th><th>人气</th><th>每天合计</th><th>人均</th></tr>");
            foreach (var item in list)
            {
                sbhtml.AppendFormat("<tr><td>{1}</td><td>{2}</td><td>{3}</td><td>{4}</td><td>{5}</td><td>{6}</td><td>{7}</td> </tr>"
                    , item.TimeDay, item.WangYin, item.ios, item.zfb, item.Weixin, item.Ren, item.RenAvg, item.SumPay);
            }
            sbhtml.Append("</table>");
            string html = sbhtml.ToString();
            byte[] fileContents = Encoding.UTF8.GetBytes(html);//一定要加上 避免乱码
            return File(fileContents, "application/ms-excel", DateTime.Now.ToString("yyMMddHHssyy") + "充值记录.xls");
        }

2.利用 先打包后下载(注意删除服务器中的文件 )

using Excel = Microsoft.Office.Interop.Excel; //注意引入
 DateTime time = DateTime.Now;
            //表格的顶层
            Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
            //创建Excel工作薄
            Excel.Workbook workbook = excel.Workbooks.Add(Server.MapPath("~/Excel/员工列表模板.xlsx"));
            //引用Excel工作簿
            excel.Visible = true;
            //创建Excel工作表
            Excel.Worksheet sheet = workbook.Worksheets[1] as Excel.Worksheet;
            //创建Excel工作表名称
            sheet.Name = "员工信息表";
            var list = db.Employees.Include((e) => e.Department).ToList();
            sheet.Cells[1, 2] = time.ToShortDateString() + "_员工列表";
            //标头单位信息
            sheet.Cells[3, 3] = list.Count;
            sheet.Cells[3, 5] = list.Where(e => e.E_Sex == "男").Count();
            sheet.Cells[3, 7] = list.Where(e => e.E_Sex == "女").Count();
            int i = 6;
            //遍历泛型集合中的所有记录,把数据填充到单元格里面去
            foreach (var item in list)
            {
                sheet.Cells[i, 2] = item.E_ID;
                sheet.Cells[i, 3] = item.E_Name;
                sheet.Cells[i, 4] = item.E_Sex;
                sheet.Cells[i, 5] = item.E_Age;
                sheet.Cells[i, 6] = "'" + item.E_Tel;//注意加这个的意思是让电话在Excel里为文本,而不是数字,不然显示不好看
                sheet.Cells[i, 7] = item.Department.D_Name;
                i += 1;
            }
            string path = "~/Excel/员工列表_" + time.ToString("yyyy-MM-dd_hhmmss") + ".xlsx";
            //先把文件保存到网站的Excel文件夹里面,然后再下载到客户端来
            workbook.SaveAs(Server.MapPath(path), Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Excel.XlSaveAsAccessMode.xlExclusive, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
            workbook.Close(Missing.Value, Missing.Value, Missing.Value);
            excel.Quit();
            //保存好后实现文件的下载
            FileInfo loadFile = new FileInfo(Server.MapPath(path));
            Response.Clear();
            Response.ClearHeaders();
            Response.Buffer = false;
            Response.ContentType = "application/octet-stream";
            Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(loadFile.Name, System.Text.Encoding.UTF8));
            Response.AppendHeader("Content-Length", loadFile.Length.ToString());
            Response.WriteFile(loadFile.FullName);
            Response.Flush();
            //下载完文件后将excel文件夹中的临时文件删除
            System.IO.File.Delete(Server.MapPath(path));
            //释放进程
            GC.Collect();
            return RedirectToAction("Index");

一个页面处理只有一个action 多个按钮时就需要采用 @Html.ActionLink(‘文本’,’actionName’,’ControllerName’);
或者是异步 但是当你用异步时 会执行后台的方法 但是就是不返回下载(自己没研究透彻的问题)
解决方法之一:
function aa() {
window.location.href = "/paystat/ExploreExcel/?TimeBeg=" + $("#TimeBeg").val() + "&TimeEnd=" + $("#TimeEnd").val() + "&page=" + $("#page").text();
}

至于怎么调用这个方法都行 随你用 a 标签阻止跳转 还是用button 的onclick 都行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值