相关文章推荐
独立的鸵鸟  ·  应对字体反爬 - 云野Winfield - 博客园·  1 年前    · 
朝气蓬勃的仙人掌  ·  vba调整word里面图片大小_vba图片锁 ...·  1 年前    · 
爱健身的芒果  ·  js正则表达式截取文件名/文件后缀 - ...·  2 年前    · 
小眼睛的苹果  ·  【Java】【MySQL】数据库存储的日期是 ...·  2 年前    · 
风流倜傥的灭火器  ·  [archlinux][tls] ...·  2 年前    · 
Code  ›  ASP.NET使用NPOI将数据导出Excel_asp.net npoi导出excel_zlbcdn的博客
https://blog.csdn.net/zlbcdn/article/details/124492817
威武的菠菜
2 年前
      • 1、说明
      • 2、获取开源项目,生成DLL
        • 2.1 获取开源项目
        • 2.2 生成DLL
          • 2.2.1 重新添加SS文件夹-->UserModel文件夹下的所有文件
          • 2.2.2 使用Nuget添加EnumsNET
        • 3、使用样例
          • 3.1 环境说明
          • 3.2 特殊说明
          • 3.2 通过界面的形式下载
          • 3.3 使用WebAPI将数据导出excel
        • 4、代码下载
        • 5、总结

        之前使用IE浏览器的ActiveX将数据导出为excel,但这个依赖于IE,且有安全隐患,因此使用第三方插件进行导出。网上找了找发现了NPOI。总的来说,挺好用。但里面也有很多坑。

        2、获取开源项目,生成DLL

        2.1 获取开源项目

        NPOI的开源地址为: 项目在GitHub的地址 ,从上面下载源码即可。

        2.2 生成DLL

        最坑的事情是源码下来后,在生成DLL过程中会出现如下的错误:
        生成DLL时的错误信息

        2.2.1 重新添加SS文件夹–>UserModel文件夹下的所有文件

        具体操作如下:
        添加现有项
        UserModel文件

        2.2.2 使用Nuget添加EnumsNET

        添加Enums.NET 基本上这样,就可以生成生成功了。成功后如下图所示
        生成成功后的截图

        3、使用样例

        3.1 环境说明

        使用了win10企业版,VS2019社区版,.NET.Framework4.7.2,ASP.NET MVC 5

        3.2 特殊说明

        从GitHub拉下来的最新版NPOI中,其使用了 Microsoft.IO.RecyclableMemoryStream ,其依赖项最低是.NET.Framework4.6.1。因此在使用NPOI时,要特别注意选择合适的版本。

        3.2 通过界面的形式下载

        即通过点击按钮,进行数据下载。
        前端界面如下:
        前端界面
        下载效果如下:
        在这里插入图片描述 数据效果

        前端代码如下:

        ViewBag.Title = "Index"; < h2 > Index </ h2 > <!--方法1--> <!--前端可以在js文件中使用window.open('/NPOIWebTest/NPOIWeb/ExportExcel')--> <!--方法2--> < a href = " /NPOIWebTest/NPOIWeb/ExportExcel " > 下载Excel </ a >

        Controller的代码如下:

        //使用界面进行下载
        public ActionResult ExportExcel()
           ExportClass export = new ExportClass();
           HSSFWorkbook detaildata = export.getExportData("数据导出");
           MemoryStream ms = new MemoryStream();
           detaildata.Write(ms);
           ms.Seek(0, SeekOrigin.Begin);
           return File(ms, "application/vnd.ms-excel", "Excel的文件名.xls");
        

        其中ExportClass类源码如下:

        public class ExportClass
            //返回展示的名称。用于excel的标题
            public List<string> getDisplayName<T>(T entity)
                List<string> resultList = new List<string>();
                PropertyInfo[] pinfoArray = entity.GetType().GetProperties();
                foreach (var item in pinfoArray)
                    var obj = item.GetCustomAttributes(typeof(DisplayNameAttribute), true);
                    if(obj!=null)
                        var displayName = ((DisplayNameAttribute)obj[0]).DisplayName;
                        resultList.Add(displayName);
                return resultList;
            //返回真实数据
            public List<string> getTrueValue<T>(T entity)
                List<string> resultList = new List<string>();
                Type type = entity.GetType();
                PropertyInfo[] pinfoArray = type.GetProperties();
                foreach (var propertyItem in pinfoArray)
                    string name = propertyItem.Name;
                    PropertyInfo pinfo = type.GetProperty(name);
                    var theTrueValue = pinfo.GetValue(entity).ToString();
                    resultList.Add(theTrueValue);
                return resultList;
            //返回一个Excel
            public HSSFWorkbook getExportData(string sheetname)
                HSSFWorkbook book = new HSSFWorkbook();
                ISheet sheet = book.CreateSheet(sheetname);
                //获取数据
                List<ExcelDataModel> dataList = new List<ExcelDataModel>() { 
                    new ExcelDataModel { TheColoumID="第(1,1)数据",TheColoumName="第(1,2)数据"},
                    new ExcelDataModel { TheColoumID="第(2,1)数据",TheColoumName="第(2,2)数据"},
                    new ExcelDataModel { TheColoumID="第(3,1)数据",TheColoumName="第(3,2)数据"}
                //获取标题的数据
                List<string> titleList = getDisplayName<ExcelDataModel>(dataList.FirstOrDefault<ExcelDataModel>());
                ICellStyle cellStyle = book.CreateCellStyle();
                cellStyle.BorderBottom = BorderStyle.Thin;
                cellStyle.BorderLeft = BorderStyle.Thin;
                cellStyle.BorderTop = BorderStyle.Thin;
                cellStyle.BorderRight = BorderStyle.Thin;
                cellStyle.VerticalAlignment = VerticalAlignment.Center;
                //创建表头
                IRow row = sheet.CreateRow(0);
                for (int i = 0; i < titleList.Count; i++)
                    row.CreateCell(i).SetCellValue(titleList[i]);
                //填充数据
                for (int i = 0; i < dataList.Count; i++)
                    IRow temprow = sheet.CreateRow(i + 1);
                    var tempResult = getTrueValue(dataList[i]);
                    for (int j = 0; j < titleList.Count; j++)
                        temprow.CreateCell(j).SetCellValue(tempResult[j]);
                return book;
        public class ExcelDataModel
            [DisplayName("第一列的名称")]
            public string TheColoumID { get; set; }
            [DisplayName("第二列")]
            public string TheColoumName { get; set; }
        

        3.3 使用WebAPI将数据导出excel

        API的代码如下:

        [HttpGet]
        public HttpResponseMessage ExportExcel()
             //获取数据
             ExportClass export = new ExportClass();
             HSSFWorkbook detaildata = export.getExportData("数据导出");
             //整理返回结果
             using(MemoryStream ms = new MemoryStream())
                 detaildata.Write(ms);
                 var response = new HttpResponseMessage(HttpStatusCode.OK)
                     Content = new ByteArrayContent(ms.ToArray())
                 response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
                 response.Content.Headers.ContentDisposition =
                        new ContentDispositionHeaderValue("attachment")
                            FileName = "数据excel.xlsx"
                 return response;
        

        4、代码下载

        源码下载:具体下载地址
        提取码:NHZL

        总的来说,NPOI是一个不错的插件,不过建议开源项目作者把精力更多的放在永攀高峰的技术上,取的更大的成果。

        asp.net中利用NPOI实现导出DataSet到Excel中,首先下载对应的dll,下载地址:将其添加到项目引用中。下面给出一个方法NPOIHelper.cs,代码如下:using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Configu
        数据导出这个功能很常见,平时也是经常要用到,asp.net 中要实现这个功能。 一般来就是两种方法,一种是利用HttpResponse获取HTTP响应数据流写入到excel文件,但这个方法,相对来说实现比较烦琐,而且效率不高,重点我按网上那些写法导出的文件是打不开的。 所以我选择另一种方法,别人写好的开源插件,一般C#导出导入excel使用的是NPOI或MyXls,这篇文章就是介绍使用NPOI... DataTable dt = new DataTable("Table"); var strPath = Path.Combine(_webhostenvironment.ContentRootPath, AppConfigurtaion.Configuration["AppSettings:upload"]); string name = DateTime.. protected void getExcel(DataTable dt) NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook(); NPOI.SS.UserModel.Sheet sheet = book.CreateSheet("table1"); NPOI.SS.UserModel.Row row = sheet.CreateRow(0); for (int i = 0; i < dt.Columns.Count; i++) row.CreateCell(i).SetCellValue(dt.Columns[i].ColumnName); for (int i = 0; i < dt.Rows.Count; i++) NPOI.SS.UserModel.Row row2 = sheet.CreateRow(i + 1); for (int j = 0; j < dt.Columns.Count; j++) row2.CreateCell(j).SetCellValue(dt.Rows[i][j].ToString()); //写入到客户端 System.IO.MemoryStream ms = new System.IO.MemoryStream(); book.Write(ms); Response.AddHeader("Content-Disposition", string.Format("attachment; filename=excel.xls")); Response.BinaryWrite(ms.ToArray()); book = null; ms.Close(); ms.Dispose(); 1.1、NPOI是什么   NPOI是POI的.NET版本,POI是一套用Java写成的库,我们在开发中经常用到导入导出表格、文档的情况,NPOI能够帮助我们在没有安装微软Office的情况下读写Office文件,如xls, doc, ppt等。NPOI采用的是Apache 2.0许可证(poi也是采用这个许可证),这意味着它可以被用于任何商业或非商业项目,我们不用担心因为使用它而必须开放你自己的源代码,所以它对于很多从事业务系统开发的公司来说绝对是很不错的选择。 1.2、NPOI简
        不管用哪一种语言开发应用程序,导出功能是最常见的,一般导出文件格式最常见的有PDF 、Excel、CSV、Word、TXT等,今天我们在此介绍一下Excel的导出方法。 微软提供了导出Excel的多种办法,但是今天我们在这里只介绍一种第三方的导出方法,因为它简单,更多符合我们的编程习惯(个人观点),下面开始: 一、下载,官网地址:https://npoi.codeplex.c
        在 .NET 6 中,你可以使用 NPOI 库来创建 Excel 文件。NPOI 是一个用于读取和写入 Microsoft Office 格式文档的 .NET 库,包括 Excel、Word 和 PowerPoint 文件。 以下是一个简单的示例,用于创建一个包含一些数据的 Excel 文件: 首先,你需要安装 NPOI 库,可以通过 NuGet 包管理器或者命令行工具来安装: Install-Package NPOI -Version 2.5.4 或者使用 dotnet cli: dotnet add package NPOI --version 2.5.4 然后,你需要引入 NPOI 命名空间: ```csharp using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System.IO; 最后,可以按照以下步骤创建一个 Excel 文件: ```csharp // 创建一个工作簿 IWorkbook workbook = new XSSFWorkbook(); // 创建一个工作表 ISheet sheet = workbook.CreateSheet("Sheet1"); // 创建一行,并在该行中创建单元格 IRow row = sheet.CreateRow(0); row.CreateCell(0).SetCellValue("Name"); row.CreateCell(1).SetCellValue("Age"); // 添加一些数据 row = sheet.CreateRow(1); row.CreateCell(0).SetCellValue("John"); row.CreateCell(1).SetCellValue(30); row = sheet.CreateRow(2); row.CreateCell(0).SetCellValue("Jane"); row.CreateCell(1).SetCellValue(25); // 保存文件 using (var fileStream = new FileStream("example.xlsx", FileMode.Create, FileAccess.Write)) workbook.Write(fileStream); 这将创建一个名为 `example.xlsx` 的 Excel 文件,其中包含两列数据:名称和年龄。 注意,这是一个简单的示例,你可以根据需要添加更多的行和列,并使用不同的数据类型。
 
推荐文章
独立的鸵鸟  ·  应对字体反爬 - 云野Winfield - 博客园
1 年前
朝气蓬勃的仙人掌  ·  vba调整word里面图片大小_vba图片锁定横纵比例-CSDN博客
1 年前
爱健身的芒果  ·  js正则表达式截取文件名/文件后缀 - front-gl - 博客园
2 年前
小眼睛的苹果  ·  【Java】【MySQL】数据库存储的日期是字符类型,查询指定日期时间区间是用数据库的方法STR_TO_DATE().-阿里云开发者社区
2 年前
风流倜傥的灭火器  ·  [archlinux][tls] archlinux下使curl支持sslv3的方法 - toong - 博客园
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号