前言:

记录这篇使用记录,是为了方便以后学习查阅和让没有使用过的人了解一下,其中不足还请见谅。不是很全的文章,大神请绕行。

在项目中我们或多或少的会遇到数据导出到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

使用那个全凭自己喜好吧,对比自己了解就好。

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

  1. mvc导出excel记录

    前言: 记录这篇使用记录,是为了方便以后学习查阅和让没有使用过的人了解一下,其中不足还请见谅.不是很全的文章,大神请绕行.在项目中我们或多或少的会遇到数据导出到excel表格以便线下查看或者记录一些需 ...

  2. 记录一个 C# 导出 Excel 的坑

    Ø  简介 其实该文章并没有什么技术含量,只是记录下个人心得.在以后有朋友遇到类似问题,可以借鉴下,或者遇到相同问题时的提供个参考方向. 也算我的一个经历吧,这个问题我花了足足一天多的时间才找到问题, ...

  3. Oracle导出excel

    oracle导出excel(非csv)的方法有两种,1.使用sqlplus  spool,2.使用包体 现将网上相关代码整理后贴出以备不时之需: 使用sqlplus: 使用sqlplus需要两个文件: ...

  4. [转]Java中导入、导出Excel

    原文地址:http://blog.csdn.net/jerehedu/article/details/45195359 一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样 ...

  5. 多线程异步导出excel

    先新建一个执行类 @Service public class MultiService { private static final Logger logger = LoggerFactory.get ...

  6. MyXls导出Excel的各种设置

    MyXls是一个操作Excel的开源类库,支持设置字体.列宽.行高(由BOSSMA实现).合并单元格.边框.背景颜色.数据类型.自动换行.对齐方式等,通过众多项目的使用表现,证明MyXls对于创建简单 ...

  7. 导入导出Excel工具类ExcelUtil

    前言 前段时间做的分布式集成平台项目中,许多模块都用到了导入导出Excel的功能,于是决定封装一个ExcelUtil类,专门用来处理Excel的导入和导出 本项目的持久化层用的是JPA(底层用hibe ...

  8. NPOI、MyXls、Aspose.Cells 导入导出Excel(转)

    Excel导入及导出问题产生: 从接触.net到现在一直在维护一个DataTable导s出到Excel的类,时不时还会维护一个导入类.以下是时不时就会出现的问题: 导出问题: 如果是asp.net,你 ...

  9. 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续3篇-导出时动态生成多Sheet EXCEL)

    ExcelUtility 类库经过我(梦在旅途)近期不断的优化与新增功能,现已基本趋向稳定,功能上也基本可以满足绝大部份的EXCEL导出需求,该类库已在我们公司大型ERP系统全面使用,效果不错,今天应 ...

随机推荐

  1. 程序员的视角:java GC

    GC(Garbage Collection 垃圾回收)的概念随着 java 的流行而被人们所熟知. 实际 GC 最早起源于20世纪60年代的 LISP 语言,是一种自动的内存管理机制. GC 要解决的 ...

  2. Cocos2d中update与fixedUpdate的区别(五)

    在真实情况中update:和fixedUpdate方法如何去调用? 由上所述,所以update方法在每帧被调用1次,从而给你一个机会去更新你的游戏对象的状态在其绘制之前.而fixedUpdate:方法 ...

  3. Android拼图游戏的设计逻辑,从切图到交互动画,从关卡到倒计时,实例提高!

    Android拼图游戏的设计逻辑,从切图到交互动画,从关卡到倒计时,实例提高! 群英传的最后一章,我大致的看了一下这个例子,发现鸿洋大神也做过,就参考两个人的设计逻辑,感觉都差不多,就这样实现起来了 ...

  4. 实用Android 屏幕适配方案分享

    转载地址:http://blog.csdn.net/gao_chun/article/details/45645051 真正可用,并且简单易行,可以在多个屏幕大小和屏幕密度上有良好表现的Android ...

  5. LeetCode之“树”:Symmetric Tree && Same Tree

    Symmetric Tree 题目链接 题目要求: Given a binary tree, check whether it is a mirror of itself (ie, symmetric ...

  6. 【Visual C++】游戏编程学习笔记之三:游戏循环的使用

     本系列文章由@二货梦想家张程 所写,转载请注明出处. 本文章链接:http://blog.csdn.net/terence1212/article/details/44208419 作者:Zee ...

  7. Android Bootloader LittleKernel的两篇文章

    Android 开发之 ---- bootloader (LK) LK是什么 LK 是 Little Kernel 它是 appsbl (Applications ARM Boot Loader)流程 ...

  8. C语言之归并排序

    即将两个都升序(或降序)排列的数据序列合并成一个仍按原序排列的序列. 上代码: #include <stdio.h> #include <stdlib.h> #define m ...

  9. "《算法导论》之‘线性表’":双向循环链表

    本文双链表介绍部分参考自博文数组.单链表和双链表介绍 以及 双向链表的C/C++/Java实现. 1 双链表介绍 双向链表(双链表)是链表的一种.和单链表一样,双链表也是由节点组成,它的每个数据结点中 ...

  10. 苹果新的编程语言 Swift 语言进阶(十三)--类型检查与类型嵌套

    一 类型检查 1. 类型检查操作符 类型检查用来检查或转换一个实例的类型到另外的类型的一种方式. 在Swift中,类型检查使用is和as操作符来实现. is操作符用来检查一个实例是否是某种特定类型,如 ...