• mvc导出excel记录


    前言:

    记录这篇使用记录,是为了方便以后学习查阅和让没有使用过的人了解一下,其中不足还请见谅。不是很全的文章,大神请绕行。
    在项目中我们或多或少的会遇到数据导出到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(1, 1);
    using (var range = workSheet.Cells[1, 1, 1, 4])
    {
    range.Merge = true;
    range.Style.Font.SetFromFont(new Font("Britannic Bold", 18, FontStyle.Regular));
    range.Style.HorizontalAlignment = ExcelHorizontalAlignment.CenterContinuous;
    range.Style.Fill.PatternType = ExcelFillStyle.Solid;
    range.Style.Fill.BackgroundColor.SetColor(Color.FromArgb(184, 204, 228));
    range.Style.Font.Color.SetColor(Color.Black);
    range.Value = "菜单导出信息";
    }
    #endregion
    
    #region 设置列宽
    //设置列宽
    workSheet.Column(1).Width = 30;
    workSheet.Column(2).Width = 30;
    workSheet.Column(3).Width = 30;
    workSheet.Column(4).Width = 20;
    #endregion
    #region 设置标题
    /*设置标题*/
    workSheet.Cells[2, 1].Value = "菜名";
    workSheet.Cells[2, 2].Value = "材料名称";
    workSheet.Cells[2, 3].Value = "材料类别";
    workSheet.Cells[2, 4].Value = "材料所需克数";
    #endregion
    
    using (var range = workSheet.Cells[2, 1, 2, 4])
    {
    range.Style.Font.Bold = true;
    range.Style.Fill.PatternType = ExcelFillStyle.Solid;
    range.Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.FromArgb(70, 130, 180));
    range.Style.Fill.BackgroundColor.SetColor(Color.FromArgb(70, 130, 180));
    range.Style.Font.Color.SetColor(Color.White);
    //range.AutoFilter = true;
    }
    
    #region 设置单元格内容
    /*设置单元格内容*/
    int row = 3;
    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, 1].Value = "";
    workSheet.Cells[row, 2].Value = loop.stuffName;
    workSheet.Cells[row, 3].Value = loop.stuffType;
    workSheet.Cells[row, 4].Value = loop.requireNum;
    row++;
    }
    if (menuDataList.Count() == 0)
    {
    workSheet.Cells[row, 1].Value = "";
    workSheet.Cells[row, 2].Value = "";
    workSheet.Cells[row, 3].Value = "";
    workSheet.Cells[row, 4].Value = "";
    row++;
    }
    //合并园区行头
    workSheet.Cells[biginRow, 1, row - 1, 1].Merge = true;
    workSheet.Cells[biginRow, 1, row - 1, 1].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
    使用那个全凭自己喜好吧,对比自己了解就好。

    作者:YanBigFeg —— 颜秉锋

    出处:http://www.cnblogs.com/yanbigfeg

    本文版权归作者和博客园共有,欢迎转载,转载请标明出处。如果您觉得本篇博文对您有所收获,觉得小弟还算用心,请点击右下角的 [推荐],谢谢!

  • 相关阅读:
    lua 函数调用1 -- 闭包详解和C调用
    lua API 小记2
    Lua API 小记1
    unity3d开发环境配置
    Hash表
    如何优化Cocos2d-X游戏的内存
    openGL光源概念
    Cocos2D-X屏幕适配新解
    Lua脚本在C++下的舞步
    lua table操作实例详解
  • 原文地址:https://www.cnblogs.com/yanbigfeg/p/9233345.html
Copyright © 2020-2023  润新知