MVC导出Excel,提供下载Excel

类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);

时间: 2024-10-11 07:50:30

MVC导出Excel,提供下载Excel的相关文章

asp.net MVC 导出查询结果到Excel

首先在View视图中有一表单form,导出按钮<input class="btn export" type="button" value="导出" />,在js写入点击导出按钮的代码,如下: $(".export").click(function () { window.location.href = "/Statis/ExportExecel?data=" + $("form&quo

使用DateSet下载Excel

这里我们使用Microsoft.Office.Interop.Excel.dll下载Excel,没有引用可点击下载 关键代码,ExcelHelper类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Windows.Forms; using System.Runtime.InteropServices; usi

ASP.NET MVC导出excel(数据量大,非常耗时的,异步导出)

要在ASP.NET MVC站点上做excel导出功能,但是要导出的excel文件比较大,有几十M,所以导出比较费时,为了不影响对界面的其它操作,我就采用异步的方式,后台开辟一个线程将excel导出到指定目录,然后提供下载. 效果如下: 选中了多行,会导出多个工作簿sheet,一个汇总的,其他的就是明细数据. 这里我使用了NPOI组件来进行excel导出,下面是要几个封装好的类,从网上找的,然后修改了一下. GenerateSheet.cs using NPOI.SS.UserModel; usi

MVC导出数据到EXCEL新方法:将视图或分部视图转换为HTML后再直接返回FileResult

MVC导出数据到EXCEL新方法:将视图或分部视图转换为HTML后再直接返回FileResult 导出EXCEL方法总结:MVC导出数据到EXCEL的方法有很多种,常见的是: 1.采用EXCEL COM组件来动态生成XLS文件并保存到服务器上,然后转到该文件存放路径即可:优点:可设置丰富的EXCEL格式,缺点:需要依赖EXCEL组件,且EXCEL进程在服务器中无法及时关闭,以及服务器上会存留大量的不必要的XLS文件: 2.设置输出头为:application/ms-excel,再输出拼接的HTM

菜鸟关于mvc导出Excel的想法

本人菜鸟一个,关于MVC生成Excel的一点想法.有错误请指教. 在视图上最终生成的table.添加下载excel按钮,用js或jq写当点击这个按钮执行查找页面上的<table>标签,并提交table的值.在控制器里写一个action用于接收返回的<table>的内容,进行处理生成excel文件,返回excel文件下载.

ASP.NET MVC下载excel文档

问题来自论坛: 很早以前,学习做asp.net练习时,就是分享过<ASP.NET MVC应用程序实现下载功能>http://www.cnblogs.com/insus/p/3615714.html 比如你的excel文档,是存放于project的DownloadFiles目录之下: 创建一个控制器,如今个月为八月,就创建一个AugControllers: 上面有句“application/vnd.ms-excel” Office MIME type: 参考<Microsoft Offic

list数据导出excel并且下载到本地

最近做grid列表相关数据导出到excel功能,根据自己选择的列导出成excel 并且下载到本地.下载位置根据配置文件进行的配置.废话不说 直接上关键代码: 需要引入相关的包: compile 'net.sourceforge.jexcelapi:jxl:2.6.12'这是我项目中gradle的配置. @Override public void exportExcel(Integer[] ids,HttpServletResponse response) { List<WithdrawDepos

MVC导出Excel到客户端

MVC导出数据到Excel详解 今天为大家分享一个利用NPIO导出数据到Excel 客户端的例子!(刚毕业的小白,第一次写博,如有错误 还望各位大咖指正) 1.NPOI官方网站:(http://npoi.codeplex.com/) 需要引用的dll文件如下: 2.用到的ExcelHelper类: 1 using Common.Logging; 2 using NPOI.HPSF; 3 using NPOI.HSSF.UserModel; 4 using NPOI.HSSF.Util; 5 us

使用node.js生成excel报表下载(excel-export express篇)

引言:日常工作中已经有许多应用功能块使用了nodejs作为web服务器,而生成报表下载也是我们在传统应用. java中提供了2套类库实现(jxl 和POI),.NET 作为微软的亲儿子更加不用说,各种com组件贴心使用. nodejs作为一门新的语言,报表功能也不是十分完善. (1).js-xlsx : 目前 Github 上 star 数量最多的处理 Excel 的库,支持解析多种格式表格XLSX / XLSM / XLSB / XLS / CSV,解析采用纯js实现,写入需要依赖nodejs