- 浏览: 190369 次
- 性别:
- 来自: 广州
文章分类
最新评论
网上有很多关于导出的例子,这里讲一个利用NPOI导出excel的方法,使用此插件后即使客户端或服务器不装office也能成功导出
配套的dll参考附件,此版本比较早,和网上的方法实现有些小差异。但也都是小修小改。
其实两个方法总体一样,一个是在流文件生成后保存到本地,一个是流文件生成后返回给客户端
这里要说明一下如果是以流文件返回到客户端了,需要用
window.location.href = '../../report/ExcelToClient'; //后台生成流文件的url请求地址
如果要使用.ajax异步获取,那么会收到乱码。原因是.ajax只针对文本信息存放,而response后的是二进制流无法处理。所以直接用href就搞定了
参考:https://www.cnblogs.com/lunawzh/p/7966214.html
附件是NPOI最新的2.3.0.0版本
配套的dll参考附件,此版本比较早,和网上的方法实现有些小差异。但也都是小修小改。
#region 导出报表文件到服务器 /// <summary> /// 导出报表文件到服务器 /// </summary> /// <param name="dt">数据源</param> /// <param name="fileName">文件名</param> /// <param name="sheetName">sheet的名字</param> /// <param name="path">要导出的文件路径</param> /// <param name="type">1=xls 2=xlxs</param> /// <returns>成功返回true</returns> public static bool ExportExcel(DataTable dt,string fileName,string sheetName,string path,string type = "1") { try { IWorkbook workbook; string name_suffix = string.Empty; //创建一个工作簿 if (type == "1") //保存为.xls { workbook = new HSSFWorkbook(); name_suffix = ".xls"; } else //保存为.xlsx { workbook = new XSSFWorkbook(); name_suffix = ".xlsx"; } //创建一个 sheet 表 ISheet sheet = workbook.CreateSheet(sheetName); //创建一行 IRow rowH = sheet.CreateRow(0); //创建一个单元格 ICell cell = null; //创建单元格样式 ICellStyle cellStyle = workbook.CreateCellStyle(); //创建格式 IDataFormat dataFormat = workbook.CreateDataFormat(); //设置为文本格式,也可以为 text,即 dataFormat.GetFormat("text"); cellStyle.DataFormat = dataFormat.GetFormat("@"); //设置列名 foreach (DataColumn col in dt.Columns) { //创建单元格并设置单元格内容 rowH.CreateCell(col.Ordinal).SetCellValue(col.Caption); } //写入数据 for (int i = 0; i < dt.Rows.Count; i++) { //跳过第一行,第一行为列名 IRow row = sheet.CreateRow(i + 1); for (int j = 0; j < dt.Columns.Count; j++) { cell = row.CreateCell(j); cell.SetCellValue(dt.Rows[i][j].ToString()); cell.CellStyle = cellStyle; } } //判断文件夹是否存在 if (Directory.Exists(path) == false)//如果不存 //在就创建file文件夹 { Directory.CreateDirectory(path); } //string path = HttpContext.Current.Server.MapPath("Export/"); 获取当前请求路径的地址,存在路径下,已改为参数传入 //设置新建文件路径及名称 string savePath = path + fileName + name_suffix; //创建文件 FileStream file = new FileStream(savePath, FileMode.CreateNew, FileAccess.Write); //创建一个 IO 流 MemoryStream ms = new MemoryStream(); //写入到流 workbook.Write(ms); //转换为字节数组 byte[] bytes = ms.ToArray(); file.Write(bytes, 0, bytes.Length); file.Flush(); //还可以调用下面的方法,把流输出到浏览器下载 //OutputClient(bytes); //释放资源 bytes = null; ms.Close(); ms.Dispose(); file.Close(); file.Dispose(); workbook.Dispose(); sheet = null; workbook = null; return true; } catch (Exception ex) { return false; } } #endregion #region 已文件流形式将表数据返回给浏览器下载 /// <summary> /// 已文件流形式将表数据返回给浏览器下载 /// </summary> /// <param name="dt">数据源</param> /// <param name="fileName">文件名</param> /// <param name="sheetName">sheet的名字</param> /// <param name="path">要导出的文件路径</param> /// <param name="type">1=xls 2=xlxs</param> /// <returns>成功返回true</returns> public static void ExportExcelToClientWeb(DataTable dt, string fileName, string sheetName, string path,string type = "1") { try { //定义工作表变量 IWorkbook workbook; //定义后缀名 string name_suffix = string.Empty; //创建一个工作簿 if (type == "1") //保存为.xls { workbook = new HSSFWorkbook(); name_suffix = ".xls"; } else //保存为.xlsx { workbook = new XSSFWorkbook(); name_suffix = ".xlsx"; } //创建一个 sheet 表 ISheet sheet = workbook.CreateSheet(sheetName); //创建一行 IRow rowH = sheet.CreateRow(0); //创建一个单元格 ICell cell = null; //创建单元格样式 ICellStyle cellStyle = workbook.CreateCellStyle(); //创建格式 IDataFormat dataFormat = workbook.CreateDataFormat(); //设置为文本格式,也可以为 text,即 dataFormat.GetFormat("text"); cellStyle.DataFormat = dataFormat.GetFormat("@"); //设置列名 foreach (DataColumn col in dt.Columns) { //创建单元格并设置单元格内容 rowH.CreateCell(col.Ordinal).SetCellValue(col.Caption); } //写入数据 for (int i = 0; i < dt.Rows.Count; i++) { //跳过第一行,第一行为列名 IRow row = sheet.CreateRow(i + 1); for (int j = 0; j < dt.Columns.Count; j++) { cell = row.CreateCell(j); cell.SetCellValue(dt.Rows[i][j].ToString()); cell.CellStyle = cellStyle; } } //判断文件夹是否存在 if (Directory.Exists(path) == false)//如果不存 //在就创建file文件夹 { Directory.CreateDirectory(path); } //string path = HttpContext.Current.Server.MapPath("Export/"); 获取当前请求路径的地址,存在路径下,已改为参数传入 //设置新建文件路径及名称 string savePath = path + fileName + name_suffix; //创建文件 FileStream file = new FileStream(savePath, FileMode.CreateNew, FileAccess.Write); //创建一个 IO 流 MemoryStream ms = new MemoryStream(); //写入到流 workbook.Write(ms); //转换为字节数组 byte[] bytes = ms.ToArray(); file.Write(bytes, 0, bytes.Length); file.Flush(); //还可以调用下面的方法,把流输出到浏览器下载 OutputClient(bytes,fileName,name_suffix); //释放资源 bytes = null; ms.Close(); ms.Dispose(); file.Close(); file.Dispose(); workbook.Dispose(); sheet = null; workbook = null; } catch (Exception ex) { } } #endregion #region 将生成的文件流返回给浏览器 /// <summary> /// 将生成的文件流返回给浏览器 /// </summary> /// <param name="bytes">文件流</param> /// <param name="fileName">要保存的文件名</param> /// <param name="name_suffix">文件后缀名</param> public static void OutputClient(byte[] bytes,string fileName,string name_suffix) { HttpResponse response = HttpContext.Current.Response; response.Buffer = true; response.Clear(); response.ClearHeaders(); response.ClearContent(); response.ContentType = "application/vnd.ms-excel"; response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}{1}", fileName, name_suffix)); response.Charset = "GB2312"; response.ContentEncoding = Encoding.GetEncoding("GB2312"); response.BinaryWrite(bytes); response.Flush(); response.Close(); } #endregion
其实两个方法总体一样,一个是在流文件生成后保存到本地,一个是流文件生成后返回给客户端
这里要说明一下如果是以流文件返回到客户端了,需要用
window.location.href = '../../report/ExcelToClient'; //后台生成流文件的url请求地址
如果要使用.ajax异步获取,那么会收到乱码。原因是.ajax只针对文本信息存放,而response后的是二进制流无法处理。所以直接用href就搞定了
参考:https://www.cnblogs.com/lunawzh/p/7966214.html
附件是NPOI最新的2.3.0.0版本
- 附件.zip (1.6 MB)
- 下载次数: 0
发表评论
-
枚举类型帮助类 EnumHelper
2019-09-02 11:29 525项目中出现的问题: 项目中会有很多地方用到文字提醒,如果在每个 ... -
C# zip文件解压压缩帮助类
2019-08-30 11:43 588原文: https://www.cnblogs.com/sun ... -
使用ITextSharp对pdf文件打水印
2019-08-19 17:13 786在项目中需要对pdf文件中的部分信息进行遮挡隐藏,于是找到了I ... -
HMAC_SHA1加密
2019-08-16 10:36 987hmacsha1在很多签名计算中都很常用了,这里对两种可能返回 ... -
.NET/java Office组件神器——Aspose.Total 17.x/18.x/19.x破解版+破解补丁下载【转】
2019-07-29 15:22 2684先上大神的网站地址: [url] https://masuit ... -
通过UserAgent判断智能手机(设备,Android,IOS)【转】
2019-07-02 17:51 1046///<summary> /// ... -
8000401a 因为配置标识不正确,系统无法开始服务器进程。请检查用户名和密码【转】
2019-06-12 17:36 2324服务器使用了word的类库,在使用过程中日志报标题错误 解决 ... -
C#(同步调用、异步调用、异步回调)--转
2019-06-05 12:04 712本文将主要通过“同步调用”、“异步调用”、“异步回调”三个示例 ... -
C# 利用word书签写入自定义数据
2019-05-14 18:08 650原文参考地址: https://www.cnblogs.com ... -
C# 项目中引用office组件后在服务器遇到的问题集锦
2019-02-13 16:03 9531、要在服务器安装相同版本的office完整版程序 本地测试机 ... -
C# word转pdf
2019-01-17 14:55 686写在最前面,如果要部署,服务器需要安装相同版本的office, ... -
C# 操作word
2019-01-17 14:49 526需要单独引入的是COM中的Microsoft Office 1 ... -
给上传的文件生成缩略图(图片和视频)
2018-11-28 17:47 892备注:里面用到的ffmpeg ... -
获取视频文件的截图
2018-11-28 17:36 702视频获取第一帧截图的方法: https://www.cnblo ... -
excel文件转为DataTable
2018-11-02 17:38 1597在人员初始化的时候,通常会用到excel编辑好,导入到数据库中 ... -
未能加载文件或程序集,System.Net.Http或它的某一个依赖项。系统找不到指定的文件。
2018-10-30 17:21 4787具体的错误描述: 未能加载文件或程序集“System.Net. ... -
EF重新封装查询
2018-10-22 17:49 1062今天搜索批量删除时,无意间翻到这篇文章感觉思路不错mark一下 ... -
EF中批量操作
2018-10-22 15:54 932在正常的使用过程中,如果要批量删除,需要先搜索符合条件的结果集 ... -
MVC学习之七_____上传多张图片
2018-09-19 15:55 1193图片上传控件:WebUploader 后台代码: pu ... -
MVC学习之六_____上传单张图片
2018-09-05 16:00 571模板页代码: @{ Layout = nul ...
相关推荐
UiPath Datatable 导出 Excel UiPath Datatable 是一个功能强大且灵活的数据表处理工具,能够高效地处理和操作大量数据。将 Datatable 导出到 Excel 是 RPA 之家的常见需求,而本文将详细讲解如何将 Datatable 导出...
DataTable导出Excel(可以避免乱行),好处是可以避免乱行,因为好多内容有特殊符号,所有一般的导出到excel会出现乱行现象
在ASP.NET编程中,将DataTable数据导出到Excel文件是一项常见的需求。在处理这个任务时,我们可能需要自定义Excel文件中的列名以满足特定的需求。以下是一个使用NPOI库来实现此功能的方法。 首先,为了使用NPOI库...
二、DataTable导出Excel 1. DataTable概述:DataTable是.NET Framework中的一个类,它代表内存中的数据表,可以用于存储和操作数据,不依赖任何数据库。 2. 导出步骤: - 创建DataTable:根据需要,创建一个...
winform中将Datatable数据导出到Excel表格中,该项目包含了例子,能使个人能更加了解winform将datatable数据导出到excel的整个流程,本资源也可拿来即用,只需要稍加修改即可。
这个主题“C#-Winform将Datatable导出Excel”就涵盖了如何在WinForm应用中实现这个功能。 首先,我们需要了解DataTable。DataTable是ADO.NET的一部分,它是一个内存中的数据集,可以存储和操作数据。它类似于数据库...
在这个"winform datatable 导出Excel demo"的实例中,我们将探讨如何在WinForm应用中使用DataTable对象来存储数据库查询结果,并将其导出为Microsoft Excel文件。这个过程涉及到几个关键的技术点,包括数据操作、...
在.NET开发环境中,DataTable是一种常用的数据结构,它用于存储和操作数据,类似于数据库中的表格。...总的来说,将DataTable导出为Excel是一项常见的需求,掌握这个技能对提升开发效率有很大帮助。
标题"gridview datatable导出EXCEL"表明我们将探讨如何在C#的WinForm和Web应用程序中实现这个功能。 在描述中提到的公共类,是指一个可复用的代码模块,它可以独立于具体的UI层,负责将GridView与DataTable关联的...
在IT行业中,`DataTable`是一种常见的数据操作对象,尤其在...以上就是关于“datatable数据导出excel”的知识点。了解这些内容后,你可以根据实际项目需求,选择合适的库和方法来实现从`DataTable`到Excel的导出功能。
在原先可以导出控件中的内容及网页内容的基础上增加接收DataTable数据导出Excel
### DataTable导出到Excel知识点详解 #### 一、概述 在.NET开发中,经常需要将数据从数据库或其他数据源导出到Excel文件中,以便于用户进行数据分析或存档。本篇文章将详细介绍如何使用C#语言实现从`DataTable`...
压缩包中的"关于DataTable导出excel"可能包含了一个简单的示例项目或代码片段,你可以查看并根据实际需求进行调整。如果遇到任何问题,可以参考这些资源或查阅`ClosedXML`的官方文档以获取更多帮助。 通过以上介绍...
本文实例为大家分享了C#使用Datatable导出Excel的具体代码,供大家参考,具体内容如下 using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System; using System.Collections.Generic; using System.Data;...
Datatable导出excel
### DataTable导出至Excel:深度解析与实现细节 在日常工作中,将数据从数据库或内存中的`DataTable`对象导出到Excel文件是一种常见的需求。这种操作不仅能够方便地分享数据,还能利用Excel强大的数据处理能力进行...
本篇将详细介绍如何使用C#结合Aspose.Cells.dll来高效地导出数据表(DataTable)到Excel。 首先,确保已将Aspose.Cells库添加到项目中。这可以通过NuGet包管理器完成,搜索"Aspose.Cells"并安装对应的版本。安装...
### C# 中 DataTable 数据到 Excel 的导出及行列转换 #### 一、概述 在实际开发过程中,我们经常需要将数据库中的数据导出为 Excel 文件,以便于数据分析或分享给其他人。同时,在某些场景下还需要对数据进行行列...
总结,WPF中将DataTable导出为Excel文件主要是通过Open XML SDK来实现的。这个过程包括创建Excel工作簿、添加工作表、写入表头和数据,最后保存并关闭文件。通过这个功能,用户可以方便地将程序中的数据导出到熟悉的...
将DataTable导出到Excel,能够方便用户进行数据查看、编辑和分析。下面我们将详细讨论如何在VB.NET和C#中实现这个功能。 首先,我们要明白,为了操作Excel文件,我们通常会使用Microsoft.Office.Interop.Excel库,...