ASP.NET MVC5下载数据到Excel文件

简介: 项目中的一个功能是将数据导入到Excel文件中,这里使用NPOI操作Excel,代码如下: public class Excel : IDataTransfer { public Stream Export(string[] titles, List[] dataSource) ...

项目中的一个功能是将数据导入到Excel文件中,这里使用NPOI操作Excel,代码如下:

public class Excel : IDataTransfer
{
    public Stream Export(string[] titles, List<string>[] dataSource)
    {
        return ExportData(titles, dataSource);
    }

    protected virtual Stream ExportData(string[] titles, List<string>[] dataSource)
    {
        if (dataSource == null)
        {
            throw new ArgumentNullException();
        }
        HSSFWorkbook book = new HSSFWorkbook();
        ISheet sheet = book.CreateSheet("sheet1");
        int rowCount = dataSource.Length;
        int cellCount = dataSource[0].Count;

        var titleRow = sheet.CreateRow(0);
        #region header style
            // 该行的高度
            titleRow.HeightInPoints = 18;
            // 列的样式
            ICellStyle headStyle = book.CreateCellStyle();
            // 单元格内容居中显示
            headStyle.Alignment = HorizontalAlignment.Center;
            // 字体样式
            IFont font = book.CreateFont();
            // 字体大小
            font.FontHeightInPoints = 12;
            // 粗体
            font.Boldweight = 1200;
            // 字体颜色
            font.Color = NPOI.HSSF.Util.HSSFColor.Green.Index;
            headStyle.SetFont(font);
            // 边框
            headStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
            headStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
            headStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
            headStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
            #endregion

        for (int i = 0; i < titles.Length; i++)
        {
            ICell cell = titleRow.CreateCell(i);
            cell.SetCellValue(titles[i]);
            cell.CellStyle = headStyle;
        }

        for (int i = 0; i < rowCount; i++)
        {
            IRow row = sheet.CreateRow(i + 1);
            for (int j = 0; j < cellCount; j++)
            {
                row.CreateCell(j).SetCellValue(dataSource[i][j]);
            }
        }

        Stream stream = new MemoryStream();
        book.Write(stream);
        book.Close();
        stream.Position = 0;
        return stream;
    }
}

Contorller中的代码:

Excel excel = new Excel();
Stream dataStream = excel.Export(titles.ToArray(), data);
return new FileStreamResult(dataStream, "application/ms-excel") { FileDownloadName = "exportInfo.xlsx" };

 

整个功能的实现并没有太大难度,这里有一点需要注意就是Excel类中的protected virtual Stream ExportData(string[] titles, List<string>[] dataSource)方法,这个方法返回一个流,流中包含要导出的数据。方法的倒数第二行:stream.Position = 0;,这里需要特别注意,将数据写入流中之后,流的位置在最末端,我们要将流的位置重置到起始位置,否则无法读取流中的数据,也就无法导出流中的数据了。

参考文章:

asp.net MVC4.0 将数据 导出 excel 表格
MemoryStream类

版权声明

本文为作者原创,版权归作者雪飞鸿所有。 转载必须保留文章的完整性,且在页面明显位置处标明原文链接

如有问题, 请发送邮件和作者联系。

目录
相关文章
|
3月前
|
前端开发 数据库
node使用node-xlsx实现excel的下载与导入,保证你看的明明白白
node使用node-xlsx实现excel的下载与导入,保证你看的明明白白
|
4月前
|
设计模式 前端开发 Java
了解 Spring MVC 架构、Dispatcher Servlet 和 JSP 文件的关键作用
Spring MVC 是 Spring 框架的一部分,是一个 Web 应用程序框架。它旨在使用 Model-View-Controller(MVC) 设计模式轻松构建Web应用程序。
63 0
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
42 0
|
1月前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
29 0
|
1月前
mvc.net分页查询案例——mvc-paper.css
mvc.net分页查询案例——mvc-paper.css
5 0
|
1月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
100 5
|
3月前
|
XML 前端开发 定位技术
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
25 0
|
3月前
|
前端开发
.net core mvc获取IP地址和IP所在地(其实是百度的)
.net core mvc获取IP地址和IP所在地(其实是百度的)
124 0
|
3月前
|
前端开发 JavaScript Java
springboot 出现 Cannot resolve MVC View ‘index‘ 问题解决办法,前后端不分离项目前端文件存放位置,已经如何访问
springboot 出现 Cannot resolve MVC View ‘index‘ 问题解决办法,前后端不分离项目前端文件存放位置,已经如何访问
108 0