asp.net Mvc 使用NPOI导出Excel文件

1.新建MVC项目,新建控制器、视图

添加控制器:

添加视图(将使用布局页前面的复选框里的勾勾去掉)

2.在Models里新建一个类

 public class Shop
    {
        /// <summary>
        /// 编号
        /// </summary>
        public int Number { get; set; }
        /// <summary>
        /// 商品名称
        /// </summary>
        public string ShopName { get; set; }
        /// <summary>
        /// 商品价格
        /// </summary>
        public double Price { get; set; }
        /// <summary>
        /// 商品种类
        /// </summary>
        public string ShopType { get; set; }
        /// <summary>
        /// 时间
        /// </summary>
        public DateTime Date { get; set; }
        /// <summary>
        /// 添加数据
        /// </summary>
        /// <returns></returns>

        public List<Shop> AddShop()
        {
            var shops = new List<Shop>();
            shops.Add(new Shop() { Number = 1001, ShopName = "小熊饼干", Price = 9.9, ShopType = "零食", Date = DateTime.Now });
            shops.Add(new Shop() { Number = 1002, ShopName = "旺仔QQ糖", Price = 5.6, ShopType = "零食", Date = DateTime.Now });
            shops.Add(new Shop() { Number = 1001, ShopName = "奥利奥饼干", Price = 15.5, ShopType = "零食", Date = DateTime.Now });
            return shops;
        }
    }

3.在控制器里新增一个方法,编写导出的代码

   public FileResult ExportData()
        {
            Shop shop = new Shop();
            //获得数据
            var Data=shop.AddShop();
            //创建一个新的excel文件
            HSSFWorkbook book = new HSSFWorkbook();
            //创建一个工作区
            ISheet sheet = book.CreateSheet("sheet1");
            //创建一行 也就是在sheet1这个工作区创建一行 在NPOI中只有先创建才能后使用
            IRow row = sheet.CreateRow(0);
            for (int i = 0; i < 5; i++)
            {
                //设置单元格的宽度
                sheet.SetColumnWidth(i, 16 * 156);
            }
            sheet.SetColumnWidth(4, 30 * 156);
            sheet.SetColumnWidth(1, 21 * 156);
            //定义一个样式,迎来设置样式属性
            ICellStyle setborder = book.CreateCellStyle();

            //设置单元格上下左右边框线 但是不包括最外面的一层
            setborder.BorderLeft = BorderStyle.Thin;
            setborder.BorderRight = BorderStyle.Thin;
            setborder.BorderBottom = BorderStyle.Thin;
            setborder.BorderTop = BorderStyle.Thin;

            //文字水平和垂直对齐方式
            setborder.VerticalAlignment = VerticalAlignment.Center;//垂直居中
            setborder.Alignment = HorizontalAlignment.Center;//水平居中
            setborder.WrapText = true;//自动换行

            //再定义一个样式,用来设置最上面标题行的样式
            ICellStyle setborderdeth = book.CreateCellStyle();

            //设置单元格上下左右边框线 但是不包括最外面的一层
            setborderdeth.BorderLeft = BorderStyle.Thin;
            setborderdeth.BorderRight = BorderStyle.Thin;
            setborderdeth.BorderBottom = BorderStyle.Thin;
            setborderdeth.BorderTop = BorderStyle.Thin;

            //定义一个字体样式
            IFont font = book.CreateFont();
            //将字体设为红色
            font.Color = IndexedColors.Red.Index;
            //font.FontHeightInPoints = 17;
            //将定义的font样式给到setborderdeth样式中
            setborderdeth.SetFont(font);

            //文字水平和垂直对齐方式
            setborderdeth.VerticalAlignment = VerticalAlignment.Center;//垂直居中
            setborderdeth.Alignment = HorizontalAlignment.Center;//水平居中
            setborderdeth.WrapText = true;  //自动换行

            //设置第一行单元格的高度为25
            row.HeightInPoints = 25;
            //设置单元格的值
            row.CreateCell(0).SetCellValue("编号");
            //将style属性给到这个单元格
            row.GetCell(0).CellStyle = setborderdeth;
            row.CreateCell(1).SetCellValue("商品名称");
            row.GetCell(1).CellStyle = setborderdeth;
            row.CreateCell(2).SetCellValue("商品价格");
            row.GetCell(2).CellStyle = setborderdeth;
            row.CreateCell(3).SetCellValue("商品种类");
            row.GetCell(3).CellStyle = setborderdeth;
            row.CreateCell(4).SetCellValue("日期");
            row.GetCell(4).CellStyle = setborderdeth;
            //循环的导出到excel的每一行
            for (int i = 0; i < Data.Count; i++)
            {
                //每循环一次,就新增一行  索引从0开始 所以第一次循环CreateRow(1) 前面已经创建了标题行为0
                IRow row1 = sheet.CreateRow(i + 1);
                row1.HeightInPoints = 21;
                //给新加的这一行创建第一个单元格,并且给这第一个单元格设置值 以此类推...
                row1.CreateCell(0).SetCellValue(Convert.ToString(Data[i].Number));
                //先获取这一行的第一个单元格,再给其设置样式属性 以此类推...
                row1.GetCell(0).CellStyle = setborder;
                row1.CreateCell(1).SetCellValue(Data[i].ShopName);
                row1.GetCell(1).CellStyle = setborder;
                row1.CreateCell(2).SetCellValue(Convert.ToString(Data[i].Price));
                row1.GetCell(2).CellStyle = setborder;
                row1.CreateCell(3).SetCellValue(Data[i].ShopType);
                row1.GetCell(3).CellStyle = setborder;
                row1.CreateCell(4).SetCellValue(Convert.ToString(Data[i].Date));
                row1.GetCell(4).CellStyle = setborder;
            }
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            book.Write(ms);
            ms.Seek(0, SeekOrigin.Begin);
            DateTime dttime = DateTime.Now;
            string datetime = dttime.ToString("yyyy-MM-dd");
            string filename = "报表导出" + datetime + ".xls";
            return File(ms, "application/vns.ms-excel", filename);
        }

4.视图页引入脚本文件及编写相应代码

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
    <link href="http://localhost:64014/bootstrap/css/bootstrap.min.css" rel="stylesheet" />
    <script src="http://localhost:64014/js/jquery-3.4.0.min.js"></script>
    <script src="http://localhost:64014/bootstrap/js/bootstrap.min.js"></script>

    <style type="text/css">
        * {
            margin: 0px;
            padding: 0px;
        }

        button {
            margin-top: 5px;
            margin-left: 5px;
        }
    </style>
    <script type="text/javascript">
        function exports() {
            //用ajax调用导出方法
            $.ajax({
                type: ‘GET‘,
                url: ‘/Export/ExportData‘,
                success: function () {
                    //注:Ajax直接调用后台的下载方法是导出不了文件的,原因是ajax无法接收后台的文件流,所以,需要再次用window.location=url或者window.open(url)下载
                    window.location = ‘/Export/ExportData‘
                }
            })
        }
    </script>
</head>
<body>
    <div>
        @*按钮用bootstrap渲染一下,会好看一些(*^_^*)*@
        <button class="btn btn-info" style="width:90px" onclick="exports()">导出</button>
    </div>
</body>
</html>

5.效果:

原文地址:https://www.cnblogs.com/zhangnever/p/11074097.html

时间: 2024-10-10 15:20:19

asp.net Mvc 使用NPOI导出Excel文件的相关文章

基于Vue + axios + WebApi + NPOI导出Excel文件

一.前言 项目中前端采用的Element UI 框架, 远程数据请求,使用的是axios,后端接口框架采用的asp.net webapi,数据导出成Excel采用NPOI组件.其业务场景,主要是列表页(如会员信息,订单信息等)表格数据导出,如表格数据进行了条件筛选,则需要将条件传至后端api,筛选数据后,导出成Excel. 思考过前端导出的3种方案: 1.使用location.href 打开接口地址.缺点: 不能传token至后端api, 无法保证接口的安全性校验,并且接口只能是get方式请求.

Asp.Net MVC 使用FileResult导出Excel数据文件

用的是Html拼接成Table表格的方式,返回 FileResult 输出一个二进制的文件. 第一种:使用FileContentResult // // 摘要: // 通过使用文件内容,内容类型,文件名称创建一个FileContentResult对象// // 参数: // fileContents: // 响应的二进制文件内容 // // contentType: // 内容类型(MIME类型) // // fileDownloadName: // 显示在浏览器下载窗口的文件名称// // 返

ASP.NET MVC使用NPOI读取excel数据

一.下载引用 目前官网不能直接下载到引用的dll,需要自己打包(我没有自己打包,我有现成的DLL,地址:https://files.cnblogs.com/files/dengxixi/NPOIdll.7z),即:NPOI.dll,NPOI.OOXML.dll,NPOI.OpenXml4Net.dll,ICSharpCode.SharpZipLib.dll(office2007版需要此dll). 二.创建MVC项目,页面代码: <html> <head> <meta name

MVC使用ExcelPackage导出Excel文件

MVC中将查询数据列表导出指定格式的excel格式 首先获取导出数据 IPageOfItems<OrderCash> OrderCashList = Entity.Selects<OrderCash>(p); 加载之前定义好的模板,实例化ExcelPackage类 string tempname = "bank.xlsx"; //定义好的导出模板 string file = Server.MapPath("/template") + &quo

Asp.net MVC 利用 Nopi 导出 Excel

/// <summary> /// 导出认账流水 /// </summary> /// <returns></returns> public ActionResult ExportAdmitBankTrans(BankTransQueryModel queryModel) { HSSFWorkbook workBook = new HSSFWorkbook(); ISheet sheet = workBook.CreateSheet("商务报表&q

Asp.Net 使用Npoi导出Excel

引言 使用Npoi导出Excel 服务器可以不装任何office组件,昨天在做一个导出时用到Npoi导出Excel,而且所导Excel也符合规范,打开时不会有任何文件损坏之类的提示.但是在做导入时还是使用OleDb的方式,这种方式的导入在服务器端似乎还是需要装office组件的,有没有不需要装组件并且能照常导入的呢? Npoi导出/下载Excel public void NpoiExcel(DataTable dt, string title) { NPOI.HSSF.UserModel.HSS

关于asp.net C# 导出Excel文件 打开Excel文件格式与扩展名指定格式不一致的解决办法

转载自 阿姆的博客 关于asp.net C# 导出Excel文件打开Excel文件格式与扩展名指定格式不一致的解决办法 导致“文件格式与扩展名指定格式不一致”这个问题,是因为大多数人在导出excel文件的时候,都是默认保存excel的格式, 也就是直接workbook.Save(path)或者workbook.SaveAs(path).进而忽略了SaveAs方法里面的参数.与保存excel文件格式有 关的是它第二个参数FileForMat. FileFormat 类型:System.Object

asp.net 导出excel文件

之前做过winfrom程序的导出excel文件的功能,感觉非常简单.现在试着做asp.net中导出excel的功能,之前用的是Microsoft.Office.Interop.Excel这个对象来实现数据导出excel,在asp.net上完全被它给恶心到了.首先是不能弹出保存对话框,然后又是在代码执行到Microsoft.Office.Interop.Excel.Application myexcel = new Microsoft.Office.Interop.Excel.Applicatio

asp.net 输出(导出) excel 文件(实用)

废话不多说直接上代码,因为文中有中间业务处理,用到的朋友需要去整改,原理: 拼写table插入数据,输出数据流即可! /// <summary> /// 商品导出Excel /// </summary> /// <returns></returns> public ActionResult ProjectToExcel() { string subjectNo = Request.Params["SNo"] ?? ""