ClosedXML、DocumentFormat.OpenXml导出DataTable到Excel
在很多系统中都用到导出,使用过多种导出方式,觉得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的更多相关文章
- 简洁的导出 datatable到excel,不用组件
简洁的导出 datatable到excel var lines = new List<string>(); string[] columnNames = dataTable.Columns ...
- .Net Core使用OpenXML导出,导入Excel
导出Excel是程序很常用到的功能,.Net Core可以借助Open-XML-SDK来导出Excel. Open-XML-SDK open-xml-sdk是是微软开源的项目.Open XML SDK ...
- 使用NPOI导出DataTable到Excel
使用C#对DataTable导出到Excel是我们工作当中比较多用到的场景,微软提供了Microsoft.Office.Interop.Excel组件可以进行操作,但是该组件在数据量大的时候速度很慢, ...
- ashx导出dataTable为Excel
一,datatable导出Excel,用户可以选择路径,方法如下: /// <summary> /// DataTable导出到Excel /// </summary> /// ...
- C# 基于DocumentFormat.OpenXml的数据导出到Excel
using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.S ...
- 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 ...
- NPOI通过DataTable导出和读取Excel
Excel导入及导出问题产生: 从接触.net到现在一直在维护一个DataTable导出到Excel的类,时不时还会维护一个导入类.以下是时不时就会出现的问题: 导出问题: 如果是asp.net,你得 ...
- 从DataTable高效率导出数据到Excel
首先从数据库读取数据到DataTable,这我就不提了,大家都明白.下面直接介绍如何从DataTable高效率导出数据到Excel中的方法,代码如下: using Microsoft.Office.I ...
- DocumentFormat.OpenXml read excel file
这里向大家介绍一种读取excel 数据的方法,用的是DoucmentFormat.OpenXml.dll 废话不多说,向大家展示一下在项目中处理过的方法,如果有任何疑问,随时联系我. using Do ...
随机推荐
- C# 接口和继承
转:https://www.cnblogs.com/songhe123/p/9558545.html 接口是方法的抽象,如果不同的类有同样的方法,那么就应该考虑使用接口. 例1: using Syst ...
- Codeforces_496_E_贪心
http://codeforces.com/problemset/problem/496/E 这好像叫序列混合贪心,简单地讲,用歌去匹配最符合条件的人.用了multiset,重载了<,加快寻找最 ...
- Codeforces 1117C Magic Ship (二分)
题意: 船在一个坐标,目的地在一个坐标,每天会有一个风向将船刮一个单位,船也可以移动一个单位或不动,问最少几天可以到目的地 思路: 二分天数,对于第k天 可以分解成船先被吹了k天,到达坐标(x1+su ...
- Go语言学习之goroutine
协程Coroutine 特点 轻量级的"线程" 非抢占式多任务处理,由协程主动交出控制权 编译器/解释器/虚拟机层面的多任务,非操作系统 多个协程可以在一个或多个线程上执行 go关 ...
- oracle面试基础
. 对于一个存在系统性能的系统,说出你的诊断处理思路 ). 做statspack收集系统相关信息 了解系统大致情况/确定是否存在参数设置不合适的地方/查看top event/查看top sql等 ). ...
- 自动化测试用例中的raise
1.一次自动化测试学习中,expect异常中包含“raise e”,这是什么意思呢? 2.网上查了一下,大概意思是:若有异常,不会执行一下的操作,但是明明是语句后确实没有其他语句呀. 3.注释掉之后, ...
- VFP日期时间转中文日期时间
本函数原为VFP中取日期转中文日期方式,后增加日期时间处理,并改用Iif及ICase修改原代码.Function DateTime2CHNParameters pdDate,plTime*!* pdD ...
- H5谷歌登录 webview错误
接入谷歌登录 H5接入谷歌登录打包apk使用webview谷歌登录不上(谷歌不支持用户代理被归类为嵌入式用户代理(也称为网络视图),因此不允许向Google发出OAuth授权请求) 解决办法:替换ua ...
- JMeter函数助手中Random函数详解
1.__Random函数的生成 The minimum value allowed for a range of values:一个范围内允许的最小值 The maximum value allowe ...
- Vue中的递归组件
递归函数我们都再熟悉不过了,也就是函数自己调用自己.递归组件也是类似的,在组件的template内部使用组件自身.那递归组件有什么使用场景呢? 我们都知道树这个数据结构就是一种递归的结构,因此我们可以 ...