zoukankan      html  css  js  c++  java
  • MVC导出Excel,提供下载Excel

    image

    类1:

    using System.Collections.Generic;
    using System.Data;
    using System.Web.Mvc;
    using System.IO;
    using System.Web.UI.WebControls;
    using System.Web;
    using System.Web.UI;
    using System.Drawing;

    namespace Base.ActionResult
    {
        public class ExcelResult : System.Web.Mvc.ActionResult
        {
            private DataTable _dataContext;
            private string _fileName;
            private string[] _headers = null;
            private TableStyle _tableStyle;
            private TableItemStyle _headerStyle;
            private TableItemStyle _itemStyle;

            public string FileName
            {
                get { return _fileName; }
            }

            public ExcelResult(DataTable dataContext, string fileName)
                : this(dataContext, fileName, null, null, null, null)
            {
            }

            public ExcelResult(DataTable dataContext, string fileName, string[] headers)
                : this(dataContext, fileName, headers, null, null, null)
            {
            }

            public ExcelResult(DataTable dataContext, string fileName, string[] headers, TableStyle tableStyle, TableItemStyle headerStyle, TableItemStyle itemStyle)
            {
                _dataContext = dataContext;
                _fileName = fileName;
                _headers = headers;
                _tableStyle = tableStyle;
                _headerStyle = headerStyle;
                _itemStyle = itemStyle;

                // provide defaults
                if (_tableStyle == null)
                {
                    _tableStyle = new TableStyle();
                    _tableStyle.BorderStyle = BorderStyle.Solid;
                    _tableStyle.BorderColor = Color.Black;
                    _tableStyle.BorderWidth = Unit.Parse("2px");
                }

                if (_headerStyle == null)
                {
                    _headerStyle = new TableItemStyle();
                    _headerStyle.BackColor = Color.LightGray;
                }
            }

            public override void ExecuteResult(ControllerContext context)
            {
                // Create HtmlTextWriter
                StringWriter sw = new StringWriter();
                HtmlTextWriter tw = new HtmlTextWriter(sw);

                // Build HTML Table from Items
                if (_tableStyle != null)
                    _tableStyle.AddAttributesToRender(tw);

                tw.RenderBeginTag(HtmlTextWriterTag.Table);

                // Generate headers from table
                if (_headers == null)
                {
                    List<string> lst = new List<string>();
                    for (int i = 0; i < _dataContext.Columns.Count; i++)
                    {
                        lst.Add(_dataContext.Columns[i].ColumnName);
                    }
                    _headers = lst.ToArray();
                }

                // Create Header Row
                tw.RenderBeginTag(HtmlTextWriterTag.Thead);

                foreach (string header in _headers)
                {
                    if (_headerStyle != null)
                        _headerStyle.AddAttributesToRender(tw);

                    tw.RenderBeginTag(HtmlTextWriterTag.Th);
                    tw.Write(header);
                    tw.RenderEndTag();
                }

                tw.RenderEndTag();

                // Create Data Rows
                tw.RenderBeginTag(HtmlTextWriterTag.Tbody);

                foreach (DataRow dr in _dataContext.Rows)
                {
                    tw.RenderBeginTag(HtmlTextWriterTag.Tr);

                    foreach (string header in _headers)
                    {
                        string strValue = dr[header].ToString();
                        strValue = ReplaceSpecialCharacters(strValue);

                        if (_itemStyle != null)
                            _itemStyle.AddAttributesToRender(tw);

                        tw.RenderBeginTag(HtmlTextWriterTag.Td);
                        tw.Write(HttpUtility.HtmlEncode(strValue));
                        tw.RenderEndTag();
                    }

                    tw.RenderEndTag();
                }

                tw.RenderEndTag(); // tbody
                tw.RenderEndTag(); // table
                WriteFile(_fileName, "application/ms-excel", sw.ToString());
            }

            private static string ReplaceSpecialCharacters(string value)
            {
                value = value.Replace("’", "'");
                value = value.Replace("“", """);
                value = value.Replace("”", """);
                value = value.Replace("–", "-");
                value = value.Replace("…", "...");
                return value;
            }

            private static void WriteFile(string fileName, string contentType, string content)
            {
                HttpContext context = HttpContext.Current;
                context.Response.Clear();
                context.Response.AddHeader("content-disposition", "attachment;filename=" + fileName);
                context.Response.Charset = "";
                context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
                context.Response.ContentType = contentType;
                context.Response.Write(content);
                context.Response.End();
            }
        }

        public static class ExcelControllerExtensions
        {
            public static System.Web.Mvc.ActionResult Excel(this Controller controller,
             DataTable dataContext, string fileName)
            {
                return new ExcelResult(dataContext, fileName, null, null, null, null);
            }

            public static System.Web.Mvc.ActionResult Excel(this Controller controller,
           DataTable dataContext, string fileName, string[] headers)
            {
                return new ExcelResult(dataContext, fileName, headers, null, null, null);
            }

            public static System.Web.Mvc.ActionResult Excel(this Controller controller,
           DataTable dataContext, string fileName, string[] headers,
         TableStyle tableStyle, TableItemStyle headerStyle, TableItemStyle itemStyle)
            {
                return new ExcelResult(dataContext, fileName, headers, tableStyle, headerStyle, itemStyle);
            }
        }
    }

    //public ActionResult GenerateExcel1()
    //{
    //   return this.Excel(dt,  "data.xls");
    //}

    控制器方法:

    public ActionResult ExportExcel(string param1, string startTime, string endTime)
         { 
             DateTime start = Convert.ToDateTime(startTime);
             DateTime end = Convert.ToDateTime(endTime);

             DataTable dt = _srv.ExportExcel(param1,start, end);
             return this.Excel(dt, "统计111.xls");
         }

    js:

    点击 “导出”按钮,执行下面的js:


    var param = "startTime=" + startTime + "&endTime=" + endTime
              + "&param1=" + param1;

    window.open("/Query/ExportExcel?" + param);

  • 相关阅读:
    oracle客户端plsql安装配置
    vue基础-vue-cli(vue脚手架
    ES5、6、7浅析
    webservice的使用
    使用intellj idea的hibernate生成注解实体类
    spring源码分析
    Total Eclipse(并查集)
    《大道至简》读后感
    2020年8月3日Java学习日记
    2020年8月2日Java学习日记
  • 原文地址:https://www.cnblogs.com/jx270/p/4410263.html
Copyright © 2011-2022 走看看