利用 NUget包 EPPlus 实现数据导出到Excel(适用于MVC)

第一步:为项目安装Epplus Nuget包。

Install-Package EPPlus 

第二步:在data项目中新建Repository,命名为ExcelWriter.cs.

将以下代码粘入,修改项目引用名字。

using System;
using OfficeOpenXml;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;

namespace ****.Data.Repositories
{
    public class ExcelWriter<TEntity>  where TEntity :class
    {
        public void WriteToFileStream(IEnumerable<TEntity> list, out MemoryStream memoryStream)
        {
            var pack = new ExcelPackage();
            var ws = pack.Workbook.Worksheets.Add("预约时间表");

            var col = 1;
            var row = 1;
            foreach (var propertyInfo in typeof(TEntity).GetProperties())
            {
                var displayName = propertyInfo.Name;
                ws.Cells[row, col].Value = displayName;
                col++;
            }

            row++;

            foreach (var coachBatchPayoutExcelModel in list)
            {

                for (var i = 1; i < col; i++)
                {
                    var colName = ws.Cells[1, i].Value.ToString();
                    ws.Cells[row, i].Value = coachBatchPayoutExcelModel.GetType().GetProperty(colName).GetValue(coachBatchPayoutExcelModel, null);
                }
                row++;
            }

            foreach (var propertyInfo in typeof(TEntity).GetProperties())
            {
                var attribute = propertyInfo.GetCustomAttributes(typeof(DisplayNameAttribute), true).Cast<DisplayNameAttribute>().SingleOrDefault();
                if (attribute != null)
                {
                    ws.Cells.First(item => item.GetValue<string>() == propertyInfo.Name).Value = attribute.DisplayName;
                }
            }
            ws.Column(6).Style.Numberformat.Format = "yyyy年MM月dd日";
            ws.Column(1).Width = 20;
            ws.Column(2).Width = 15;
            ws.Column(3).Width = 20;
            ws.Column(4).Width = 25;
            ws.Column(5).Width = 6;
            ws.Column(6).Width = 15;
            memoryStream = new MemoryStream(pack.GetAsByteArray());
        }
    }
}

以上为一泛型,如何使用请参考以下使用样例。

  #region 下载数据

            Mapper.CreateMap<OnlineBookingInfo, ExcelModel>();
            var excels = Mapper.Map<List<OnlineBookingInfo>, List<ExcelModel>>(onlineBookingInfos);

            MemoryStream memoryStream;
            var excelWriter = new ExcelWriter<ExcelModel>();
            excelWriter.WriteToFileStream(excels, out memoryStream);
            return File(memoryStream, "application/vnd.ms-excel", "郑州科技馆预约参观名单" + DateTime.Now.Date.ToString("yyyy_MM_dd") + ".xls");
  #endregion

先将需要导出的数据使用mapper,映射到新的实体类型(只需要导出的实体,此处的可以为新建)

excel的title为新建实体的dispalyname的名字。

使用的时候先

MemoryStream memoryStream;

var excelWriter = new ExcelWriter<ExcelModel>();

然后

excelWriter.WriteToFileStream(excels, out memoryStream);

最后输出

return File(memoryStream, "application/vnd.ms-excel", "郑州科技馆预约参观名单" + DateTime.Now.Date.ToString("yyyy_MM_dd") + ".xls");

 
时间: 2025-01-16 14:19:50

利用 NUget包 EPPlus 实现数据导出到Excel(适用于MVC)的相关文章

利用 NUget包 EPPlus 实现数据导出到Excel

首先安装EPPlus 包 Install-Package EPPlus 然后在需要导出的页面引用以下命名空间 using OfficeOpenXml; using OfficeOpenXml.Drawing; using OfficeOpenXml.Drawing.Chart; using OfficeOpenXml.Style; using System.IO; 以下为本人项目中用到的导出数据处理部分,仅供参考: var path = HttpContext.Current.Server.Ma

将datagrid中数据导出到excel中 -------&lt;&lt;工作日志2014-6-6&gt;&gt;

1.下载log4j jar包,放入lib目录, 导入项目中   下载地址 http://logging.apache.org/ 2.创建log4j.properties 文件  目录 Src  下面是一个 log4j.properties的例子(注:来源于网上,非本人所写) ################################################################################ # 其语法:log4j.rootLogger = [ leve

DevExpress- GridControl数据导出到EXCEL

将DevExpress-GridControl数据导出到EXCEL,目前用过两种,一为利用GridControl函数操作,一为用流(IO)操作.区别在于前者可以将你在GridControl所见格式全部导入EXCEL,比如有时候我们在Bands里面拖拽出来的Title样式,后者最大优点在于速度很快,亲测10W条数据导出只需2秒左右; ? ? No.1:用GridControl函数导出数据到EXCEL,建议设置Options下OptionsPrint-AutoWidth=False,使导出后单元格宽

支持将数据导出到Excel文档的时候设置单元格格式的.NET控件Spire.DataExport

Spire.DataExport for .NET是e-iceblue公司推出的一款数据导出类.NET控件.作为一款专业的数据导出控件,Spire.DataExport for .NET可以帮助开发人员轻松快速的从各种主流数据库中导出数据并存储于各种文件格式中.他支持从SQL Command, DataTable,ListView中导出数据并存储于MS Excel,MS Word, HTML, XML, PDF, MS Access, DBF, SQL Script, SYLK, DIF, CS

数据导出至Excel文件--好库编程网http://code1.okbase.net/codefile/SerializeHelper.cs_2012122018724_118.htm

using System; using System.IO; using System.Data; using System.Collections; using System.Data.OleDb; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; /// <summary> /// Excel操作类 /// </summary> /// Microsoft Excel 11.0 Obj

tablib把数据导出为Excel、JSON、CSV等格式的Py库(写入数据并导出exl)

#tablib把数据导出为Excel.JSON.CSV等格式的Py库 #python 3 import tablib #定义列标题 headers = ('1列', '2列', '3列', '4列', '5列') #需写入的数据,按照一行一行的输入 #元组数据的个数必须和列数一致 data = [('23','23','34','23','34'),('sadf','23','sdf','23','fsad')] #写入数据 mylist = tablib.Dataset(*data, head

Delphi 数据导出到Excel

好多办公软件特别是财务软件,都需要配备把数据导出到Excel,下面就来介绍两种数据导出方法 1.ADODB导出查询结果(此方法需要安装Excel) 2.二维表数据导出(根据Excel文件结构生成二进制文件流,不需要安装Excel) 3.如果涉及到复杂表头的(例如合并字段等),未做研究,下面也没介绍相关资料,请止步. 第一种,ADODB导出查询结果(此方法需要安装Excel) //uses DB, ADODB, ComObj, ComCtrls, excel2000, StdCtrls, adoi

Qt中将QTableView中的数据导出为Excel文件

如果你在做一个报表类的程序,可能将内容导出为Excel文件是一项必须的功能.之前使用MFC的时候我就写过一个类,用于将grid中的数据导出为Excel文件.在使用了QtSql模块后,我很容易的将这个类改写应用在Qt程序中.类的名字叫“ExportExcelObject”.使用起来很简单: [cpp] view plaincopy // 1. declare an object // – fileName Excel 文件路径 // – sheetName Excel 工作表(sheet)名称 /

将数据库的数据导出到excel中

这篇文章主要介绍了asp中把数据导出为excel的2种方法:分别用excel组件.文件组件实现,需要的朋友可以参考下.我们在做项目的时候经常要将数据库的数据导出到excel中,很多asp用户并不知道怎么写.这里总结了两种方法来导出excel,希望能帮到大家. 方法一:用excel组件 方法二:使用文件组件 可以看出,第一种方法是直接导出的是excel文件,而第二张方法是到处的是文本文件,只不过后缀名改成了xls. 然后看起来就是excel了. 经过对比第一种方法的效率没有第二种方法的效率高,而且