在很多系统中都用到导出,使用过多种导出方式,觉得ClosedXML插件的导出简单又方便。

并且ClosedXML、DocumentFormat.OpenXml都是MIT开源。

首先通过 Nuget 安装 ClosedXML 插件,同时会自动安装 DocumentFormat.OpenXml 插件。

以下就是导出相关的代码:

1、MVC控制器中的导出

// MVC 控制器中
/// <summary>
/// 导出 (无论是否需要返回值,都有 Response)
/// </summary>
public void Export1() // 传入搜索条件
{
// 1、根据条件查询到想要的数据
DataTable data = new DataTable();
// 2、设置表名(对应sheet名)、列名(对应列名)
data.TableName = "XX统计";
// 3、列宽设置(需要慢慢设置)
int[] colsWidth = new int[] { , , , };
// 4、生成导出文件
byte[] filedata = ExportHelper.ExportExcel(data);
// 5、输出文件流
HttpContext.Output(filedata, "XX统计_导出" + DateTime.Today.ShowDate() + ".xlsx");
}

2、生成导出文件

using ClosedXML.Excel;
using System.Data;
using System.IO; /// <summary>
/// 导出Excel文件
/// </summary>
/// <param name="data">导出的数据</param>
/// <param name="colsWidth">列宽</param>
/// <returns></returns>
public static byte[] ExportExcel(DataTable data, int[] colsWidth = null)
{
using (XLWorkbook workbook = new XLWorkbook())
{
IXLWorksheet worksheet = workbook.AddWorksheet(data.TableName); // 处理列
for (int i = ; i < data.Columns.Count; i++)
{
worksheet.Cell(, i + ).Value = data.Columns[i].ColumnName;
worksheet.Cell(, i + ).Style.Font.Bold = true;
} // 处理列宽
if (colsWidth != null)
{
for (int j = ; j <= colsWidth.Length; j++)
{
worksheet.Columns(j, j).Width = colsWidth[j - ];
}
} // 处理数据
int r = ;// 第二行开始
foreach (DataRow dr in data.Rows)
{
// 第一列开始
for (int c = ; c <= data.Columns.Count; c++)
{
worksheet.Cell(r, c).Value = dr[c-1].ToString();
}
r++;
} // 缓存到内存流,然后返回
using (MemoryStream stream = new MemoryStream())
{
workbook.SaveAs(stream);
return stream.ToArray();
}
}
}

3、输出文件流

using System.Text;
using System.Text.RegularExpressions;
using System.Web; /// <summary>
/// 输出文件流
/// </summary>
/// <param name="httpContext">Http上下文</param>
/// <param name="filedata">文件数据</param>
/// <param name="fileName">文件名(要后缀名)</param>
public static void Output(this HttpContextBase httpContext, byte[] filedata, string fileName)
{
//文件名称效验 文件名不能包含\/:*?<>| 其中\需要两次转义
if (Regex.IsMatch(fileName, @"[\\/:*?<>|]"))
{
fileName = Regex.Replace(fileName, @"[\\/:*?<>|]", "_");
} //判断是否为火狐浏览器(下载时,有些浏览器中文名称乱码,有些浏览器中文名正常,但不能编码,不会自动解码,如火狐)
if (httpContext.Request.Browser.Browser != "Firefox")
{
fileName = HttpUtility.UrlEncode(fileName, Encoding.UTF8);
} // 没有定义类型,用二进制流类型的MIME
string MIME = "application/octet-stream";
httpContext.Response.Clear();
httpContext.Response.Buffer = true; //该值指示是否缓冲输出,并在完成处理整个响应之后将其发送
httpContext.Response.ContentType = MIME;
httpContext.Response.ContentEncoding = Encoding.UTF8;
httpContext.Response.Charset = Encoding.UTF8.HeaderName;
httpContext.Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
httpContext.Response.AddHeader("Accept-Language", "zh-cn");
httpContext.Response.AddHeader("Content-Length", filedata.LongLength.ToString());
httpContext.Response.BinaryWrite(filedata);
httpContext.Response.Flush();
httpContext.Response.End();
}

通过ClosedXML导出操作方便。

ClosedXML、DocumentFormat.OpenXml导出DataTable到Excel的更多相关文章

  1. 简洁的导出 datatable到excel,不用组件

    简洁的导出 datatable到excel var lines = new List<string>(); string[] columnNames = dataTable.Columns ...

  2. .Net Core使用OpenXML导出,导入Excel

    导出Excel是程序很常用到的功能,.Net Core可以借助Open-XML-SDK来导出Excel. Open-XML-SDK open-xml-sdk是是微软开源的项目.Open XML SDK ...

  3. 使用NPOI导出DataTable到Excel

    使用C#对DataTable导出到Excel是我们工作当中比较多用到的场景,微软提供了Microsoft.Office.Interop.Excel组件可以进行操作,但是该组件在数据量大的时候速度很慢, ...

  4. ashx导出dataTable为Excel

    一,datatable导出Excel,用户可以选择路径,方法如下: /// <summary> /// DataTable导出到Excel /// </summary> /// ...

  5. C# 基于DocumentFormat.OpenXml的数据导出到Excel

    using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.S ...

  6. csharp: Export DataTable to Excel using OpenXml 2.5 in asp.net

    //https://www.microsoft.com/en-us/download/details.aspx?id=5124 Open XML SDK 2.0 for Microsoft Offic ...

  7. NPOI通过DataTable导出和读取Excel

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

  8. 从DataTable高效率导出数据到Excel

    首先从数据库读取数据到DataTable,这我就不提了,大家都明白.下面直接介绍如何从DataTable高效率导出数据到Excel中的方法,代码如下: using Microsoft.Office.I ...

  9. DocumentFormat.OpenXml read excel file

    这里向大家介绍一种读取excel 数据的方法,用的是DoucmentFormat.OpenXml.dll 废话不多说,向大家展示一下在项目中处理过的方法,如果有任何疑问,随时联系我. using Do ...

随机推荐

  1. https搭建(自签名证书)

    博客搬家: https搭建(自签名证书) 上一篇博客探究了https(ssl)的原理,为了贯彻理论落实于实践的宗旨,本文将记录我搭建https的实操流程,使用Apache2+ubuntu+openss ...

  2. zabbix4.0的安装与配置

    #安装zabbix监控首先的先安装LNMP环境,在这里我采用事先准备好的脚本进行安装LNMP环境 脚本内容如下: #!/bin/bash # DATE:Wed Jan # hw226234@126.c ...

  3. 2018天梯赛、蓝桥杯、(CCPC省赛、邀请赛、ICPC邀请赛)校内选拔赛反思总结!

    才四月份,上半年的比赛就告一段落了.. 天梯赛混子,三十个人分最低,把队友拖到了国三,蓝桥杯省二滚粗,止步京城,旅游选拔赛成功选为替补二队,啊! 不过既然已经过去,我们说些乐观的一面,积累了大赛经验是 ...

  4. Android Studio 学习笔记(二):布局简介和xmlns说明

    初学Android Studio,是在b站看的教程视频,这里的笔记也是以其为基础的,个人强烈安利: [天哥]Android开发视频教程最新版 Android Studio开发 Android 布局简介 ...

  5. EMC NW NMM to restore MS AG database

    Following last article, how to restore MS AG database , that is in the following: You see ?  Cheer u ...

  6. 基于 Google-S2 的地理相册服务实现及应用

    马蜂窝技术原创内容,更多干货请关注公众号:mfwtech 随着智能手机存储容量的增大,以及相册备份技术的普及,我们可以随时随地用手机影像记录生活,在手机中存储几千张甚至上万张照片已经是很常见的事情.但 ...

  7. DOCKER 学习笔记9 Kubernetes (K8s) 弹性伸缩容器 下

    前言 从上一篇看来,我们已经对于Kubernetes ,通过minikube 建立集群,而后使用kubectl 进行交互,对Deployment 部署以及服务的暴露等.这节,将学习弹性的将服务部署到多 ...

  8. C++:析构函数的调用时机

    结论:只有当类的某个实例化对象的构造函数执行完毕,而且当该对象退出作用域时,才会执行析构函数. 如果在执行构造函数的过程中抛出了异常,就不会调用析构函数 上测试代码: class Test { pub ...

  9. 学习jQuery基础语法,并通过一个案例引出jQuery的核心

    jquery是一个快速.小巧,功能强大的javascript函数库. jquery主要用来替代原生的javascript,简化代码. 前端最头疼的就是兼容:IE6/7/8兼容的最高版本是jQuery1 ...

  10. Java工作流系统jflow从表功能介绍一

    关键词:工作流快速开发平台  工作流流设计  业务流程管理   asp.net 开源工作流  bpm工作流系统  java工作流主流框架  自定义工作流引擎 表单设计器  流程设计器 从表也叫明细表, ...