前言:

记录这篇使用记录,是为了方便以后学习查阅和让没有使用过的人了解一下,其中不足还请见谅。不是很全的文章,大神请绕行。
在项目中我们或多或少的会遇到数据导出到excel表格以便线下查看或者记录一些需要的数据信息。我所知道的有两个EPPlus和NPIO这两个插件。
NPIO这个恕在下才疏学浅还没有使用不好多说,今天我就来说一下EPPlus。
EPPlus准备:
EPPlus官网地址:https://github.com/JanKallman/EPPlus
下载之后,我们在程序添加程序集之后在需要使用的地方添加一下引用:
using OfficeOpenXml;
using OfficeOpenXml.Style;
using System.Drawing;
这几个只是最基础的引用控件,你要使用更多当然需要增加更多命名空间比如图标,需要在增加using OfficeOpenXml.Drawing.Chart;
附上EPPlus支持功能列表:

好了废话不多说进入正题。

使用EPPlus:

1.创建存放文件夹
//创建存放Excel的文件夹
string path = Server.MapPath("~/Upload/Excel/MenuInfor/");
string fileName = DateTime.Now.ToString("yyyyMMddHHmmssffffff") + ".xlsx";
pathFileName = path + fileName;

//如果上传目录不存在就创建

        //如果上传目录不存在就创建
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
} FileInfo newFile = new FileInfo(pathFileName);
if (newFile.Exists)
{
newFile.Delete();
newFile = new FileInfo(pathFileName);
}

2.创建工作簿
有了存放位置之后就是创建真正的excel文件了,注意这里用到using哦,这是必须的哦。创建工作薄并存入上面所说的位置
using (ExcelPackage package = new ExcelPackage(newFile))
{
//这里面是excel所有的操作

3.创建Sheet表格
也就是我们所说的选项卡,这里才是我们存放数据的展现层。
ExcelWorksheet workSheet = package.Workbook.Worksheets.Add("这里是选项卡名称");
4.开始填充

#region 添加表头
/*添加表头*/
workSheet.InsertRow(, );
using (var range = workSheet.Cells[, , , ])
{
range.Merge = true;
range.Style.Font.SetFromFont(new Font("Britannic Bold", , FontStyle.Regular));
range.Style.HorizontalAlignment = ExcelHorizontalAlignment.CenterContinuous;
range.Style.Fill.PatternType = ExcelFillStyle.Solid;
range.Style.Fill.BackgroundColor.SetColor(Color.FromArgb(, , ));
range.Style.Font.Color.SetColor(Color.Black);
range.Value = "菜单导出信息";
}
#endregion #region 设置列宽
//设置列宽
workSheet.Column().Width = ;
workSheet.Column().Width = ;
workSheet.Column().Width = ;
workSheet.Column().Width = ;
#endregion
#region 设置标题
/*设置标题*/
workSheet.Cells[, ].Value = "菜名";
workSheet.Cells[, ].Value = "材料名称";
workSheet.Cells[, ].Value = "材料类别";
workSheet.Cells[, ].Value = "材料所需克数";
#endregion using (var range = workSheet.Cells[, , , ])
{
range.Style.Font.Bold = true;
range.Style.Fill.PatternType = ExcelFillStyle.Solid;
range.Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.FromArgb(, , ));
range.Style.Fill.BackgroundColor.SetColor(Color.FromArgb(, , ));
range.Style.Font.Color.SetColor(Color.White);
//range.AutoFilter = true;
} #region 设置单元格内容
/*设置单元格内容*/
int row = ;
foreach (FoodMenuInfor item in foodInforList)
{
var biginRow = row;
var menuDataList = menuData.Where(u => u.menuId == item.id);
//对名称进行查询
if (!string.IsNullOrEmpty(stuffName))
{
menuDataList = menuDataList.Where(a => a.stuffName.Contains(stuffName)); }
//对类别进行查询
if (!string.IsNullOrEmpty(stuffType))
{
menuDataList = menuDataList.Where(a => a.stuffType == stuffType);
}
menuDataList.OrderByDescending(b => b.addTime);
foreach (var loop in menuDataList)
{
workSheet.Cells[row, ].Value = "";
workSheet.Cells[row, ].Value = loop.stuffName;
workSheet.Cells[row, ].Value = loop.stuffType;
workSheet.Cells[row, ].Value = loop.requireNum;
row++;
}
if (menuDataList.Count() == )
{
workSheet.Cells[row, ].Value = "";
workSheet.Cells[row, ].Value = "";
workSheet.Cells[row, ].Value = "";
workSheet.Cells[row, ].Value = "";
row++;
}
//合并园区行头
workSheet.Cells[biginRow, , row - , ].Merge = true;
workSheet.Cells[biginRow, , row - , ].Value = item.menuName;
}
#endregion

5.终于内容写完了
内容添加完了,我就稍微设置了下文字水平居中和垂直居中,最后进行保存
workSheet.Cells.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;//水平居中
workSheet.Cells.Style.VerticalAlignment = ExcelVerticalAlignment.Center;//垂直居中
package.Save();
最后上一下结果。

资料借鉴:

Wico's Blog大神: http://www.mamicode.com/info-detail-63790.html
下面是pengtan大神使用NPOI和EPPlus的对比:http://www.cnblogs.com/tanpeng/p/6155749.html
使用那个全凭自己喜好吧,对比自己了解就好。

mvc导出excel记录的更多相关文章

  1. ASP.NET MVC导出excel

    ASP.NET MVC导出excel 要在ASP.NET MVC站点上做excel导出功能,但是要导出的excel文件比较大,有几十M,所以导出比较费时,为了不影响对界面的其它操作,我就采用异步的方式 ...

  2. mvc导出excel 之 新

    前段时间做的mvc导出excel 老大说要进行优化,我原来导出是用npoi插件进行导出,格式是将数据放入到datatable中,然后进行导出. 说要优化的时候就想着将datatable数据导出格式改为 ...

  3. Mvc 导出 Excel

    Mvc 导出 Excel 之前接触过Webform,winfrom 的导出Excel方法 ,优点:省事.缺点:服务器必须安装Office 这几天做项目 和 大牛学习了一下 新的方法,自己加以总结.希望 ...

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

    要在ASP.NET MVC站点上做excel导出功能,但是要导出的excel文件比较大,有几十M,所以导出比较费时,为了不影响对界面的其它操作,我就采用异步的方式,后台开辟一个线程将excel导出到指 ...

  5. MVC学习笔记---MVC导出excel(数据量大,非常耗时的,异步导出)

    要在ASP.NET MVC站点上做excel导出功能,但是要导出的excel文件比较大,有几十M,所以导出比较费时,为了不影响对界面的其它操作,我就采用异步的方式,后台开辟一个线程将excel导出到指 ...

  6. MVC 导出Excel 的其中一方法(View导出excel)

    场景:mvc下导出excel 思路:使用View导出excel 步骤: 1.导出标签添加事件 $("#export_A").click(function(){ //省略代码.... ...

  7. MVC导出Excel,提供下载Excel

    类1: using System.Collections.Generic;using System.Data;using System.Web.Mvc;using System.IO;using Sy ...

  8. spring mvc 导出 excel

    // js 触发导出 excel 方法 导出当前页的数据 含有条件查询的结果 // js 框架使用的 是 easyui function doExport(){ var optins = $(&quo ...

  9. .net mvc 导出excel表格

    使用using System.IO; /// /// 导出Excel文件,并自定义文件名 /// public static void DataTableExcel(System.Data.DataT ...

随机推荐

  1. C#中Equals()和= =(等于号)区别

    在这里,首先得告诉大家,在C#中,不管是 == ,还是 Equals() 我们都是可以重写的.所以,在具体选择使用两者时,还是得根据这两个方法的具体实现逻辑来选择. 值类型的比较 对于值类型来说,两者 ...

  2. Python简介及环境安装

    Python 官网传送门 Python是一种面向对象的解释性计算机程序设计语言. Python 2.7将于2020年1月1日终止支持,本笔记基于Python3. pip pip 是一个现代的,通用的 ...

  3. 图像质量评价方法PSNR+SSIM&&评估指标SROCC,PLCC

    update:2018-04-07 今天发现ssim的计算里面有高斯模糊,为了快速计算,先对每个小块进行计算,然后计算所有块的平均值.可以参考源代码实现,而且代码实现有近似的在里面!matlab中中图 ...

  4. 剑指offer编程题Java实现——面试题10二进制中1的个数

    题目: 请实现一个函数,输入一个整数,输出该整数二进制表示中1的个数.例如,把9表示成二进制是1001,有2位是1,该函数输出2解法:把整数减一和原来的数做与运算,会把该整数二进制表示中的最低位的1变 ...

  5. 从navicat中导入sql文件过大:Got a packet bigger than 'max_allowed_packet' bytes

    失败背景:刚才通过navicat向本地mysql数据库中导入sql文件.第一个sql文件(多个表)大小为967M,导入成功: 第二个sql(单个表)大小为50.1M,导入失败. 1.在navicat中 ...

  6. JavaSE核心之一:Date类、Calendar类、Math类、枚举;

    1.Date类 1) java.util.Date类用于封装日期及时间信息,一般仅用它显示某个日期,不对他作任何操作处理,作处理用Calendar类,计算方便. 2) Date 类本质上拥有一个lon ...

  7. Flask 中内置的 Session

    Flask中的Session Flask中的Session不同于Django的session,django的session存在后端数据库中,而flask的session会将你的SessionID存放在 ...

  8. select 的问题

    #include <errno.h> #include <string.h> #include <fcntl.h> #include <sys/socket. ...

  9. 第二十节:详细讲解String和StringBuffer和StringBuilder的使用

    前言 在 Java中的字符串属于对象,那么Java 中提供了 String 类来创建和操作字符串,即是使用对象:因为String类修饰的字符一旦被创建就不可改变,所以当对字符串进行修改的时候,需要使用 ...

  10. Java面试集合(三)

    前言 大家好,给大家带来Java面试集合(三)的概述,希望你们喜欢 三 1.在Java中是否可以含有多个类? 答:可以含有多个类,但只有一个是public类,public类的类名与文件名必须一致. 2 ...