数据导出功能

下面来演示一下导出操作
在这里插入图片描述
在这里插入图片描述

点击导出按钮,就会下载一个文件,然后即可导出
代码部分
在这里插入图片描述

控制器部分

public ActionResult ExportExcel()
        {
            var list =  from tbGoodsDetail in myModel.GoodsDetail
                        join tbGoodsType in myModel.GoodsType on tbGoodsDetail.GoodsTypeID equals tbGoodsType.GoodsTypeID
                        join tbGoodsunit in myModel.GoodSunit on tbGoodsDetail.GoodsuntID equals tbGoodsunit.GoodsunitID
                        select new Goodsdetail
                       {
                           GoodsdetailID = tbGoodsDetail.GoodsdetailID,
                           GoodsTypeID = tbGoodsType.GoodsTypeID,
                           GoodsuntID = tbGoodsunit.GoodsunitID,
                           Goodsname = tbGoodsDetail.Goodsname,
                           Goodscodding = tbGoodsDetail.Goodscodding,
                           Goodsprice = tbGoodsDetail.Goodsprice,
                           Goodstype = tbGoodsType.Goodstype1,
                           Goodsunit = tbGoodsunit.Goodsunit1

                       };
            //计数序列中的总条数
            var totalRow = list.Count();
            List<Goodsdetail> listGoodsdetail = list.ToList();

            //==构建Excel
            //1、创建工作簿 固定的写法
            NPOI.SS.UserModel.IWorkbook workbook = new NPOI.HSSF.UserModel.HSSFWorkbook();//xls

            //2、创建工作表
            NPOI.SS.UserModel.ISheet sheet = workbook.CreateSheet("工作表名称");
            workbook.SetSheetName(0, "VIP信息");

            //3、创建标题(行)
            NPOI.SS.UserModel.IRow rowTitle = sheet.CreateRow(0);//0 行索引  第一行
            rowTitle.HeightInPoints = 35;//第一行的行高

            //3-2、创建单元格
            NPOI.SS.UserModel.ICell cell0 = rowTitle.CreateCell(0);

            //3-3、单元格设置值
            cell0.SetCellValue("商品信息");

            //列合并
            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, 8));

            // 4、创建表头行并设置字段
            NPOI.SS.UserModel.IRow rowHeader = sheet.CreateRow(1);//索引 第二行
            rowHeader.CreateCell(0).SetCellValue("序号");
            rowHeader.CreateCell(1).SetCellValue("商品编码");
            rowHeader.CreateCell(2).SetCellValue("商品名称");
            rowHeader.CreateCell(3).SetCellValue("商品类别");
            rowHeader.CreateCell(4).SetCellValue("商品单位");
            rowHeader.CreateCell(5).SetCellValue("商品价格");

            //5.遍历数据
            for (int i = 0; i < listGoodsdetail.Count; i++)
            {
                //标题和表头已经占了两行
                NPOI.SS.UserModel.IRow row = sheet.CreateRow(i + 2);
                row.HeightInPoints = 22;//设置行高
                //创建列,并设置值
                row.CreateCell(0).SetCellValue(i + 1);//序号
                row.CreateCell(1).SetCellValue(listGoodsdetail[i].Goodscodding);
                row.CreateCell(2).SetCellValue(listGoodsdetail[i].Goodsname);
                row.CreateCell(3).SetCellValue(listGoodsdetail[i].Goodstype);;
                row.CreateCell(4).SetCellValue(listGoodsdetail[i].Goodsunit);
                row.CreateCell(5).SetCellValue((double)listGoodsdetail[i].Goodsprice);;
            }
            //==6、设置列宽为自动适应
            for (int i = 0; i < sheet.GetRow(1).Cells.Count; i++)
            {
                sheet.AutoSizeColumn(i);//这列自动适应最的数据单元格的宽度
                sheet.SetColumnWidth(i, sheet.GetColumnWidth(i) * 12 / 10);
            }
            //========把创建好的Excel输出到浏览器
            string fileName = "商品信息" + DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss-ffff") + ".xls";
            //把Excel转化为流输出
            MemoryStream BookStream = new MemoryStream();//定义流
            workbook.Write(BookStream);//将工作薄写入流
            BookStream.Seek(0, SeekOrigin.Begin);//输出之前调用Seek(偏移量,游标位置)

            //返回回去不是json数据是file文件
            return File(BookStream, "application/vnd.ms-excel", fileName);//文件名称
      }

记得引进NPOI
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值