C# MVC .Net NPOI实现excel导出功能

前台View通过JS调用后台Controller的方法使用NPOI组件实现excel导出功能。(利用AJAX调用时,前台页面无法响应excel的下载浏览窗口。)

将excel模板放到应用程序根目录

引用:

using System.Collections.Generic;
using System.Data;
using TecoCity.BaseInfo.Models.Check;
using NPOI.HSSF.UserModel;
using System.IO;
using System.Web;

实现代码:

  public static void Export_ProjectCheckDetail(int CheckModelID, List<ProjectCheckDetail> modellist, HttpRequestBase Request)
        {
            string strModelFile = "";
            strModelFile = Request.PhysicalApplicationPath + "ProjectCheckDetail.xls";
            HSSFWorkbook workbook = null;
            FileStream file = new FileStream(strModelFile, FileMode.Open, FileAccess.Read);
            workbook = new HSSFWorkbook(file);
            HSSFSheet sheet = (HSSFSheet)workbook.GetSheet("CheckDetail");
            if (sheet == null)
            {
                return;
            }           
           //设置详细信息
            ProjectCheck CheckModel = GetCheck(CheckModelID);
            decimal dAllRow = 0;
            if (CheckModel != null)
            {
                //1行基本信息设置
                sheet.GetRow(1).GetCell(2).SetCellValue(GetProjectName(CheckModel.ProjectID));
                sheet.GetRow(1).GetCell(4).SetCellValue(sheet.GetRow(2).GetCell(4).ToString() + CheckModel.Manager_JL + "(" + CheckModel.Manager_Tel + ")");
                sheet.GetRow(1).GetCell(6).SetCellValue(GFun.SafeToDateTime(CheckModel.CheckDate).ToString("yyyy年MM月dd日"));
                for (int i = 0; i < modellist.Count; i++)
                {
                    sheet.GetRow(i + 3).GetCell(0).SetCellValue(modellist[i].CheckProject.Replace("\\r", "\n"));
                    sheet.GetRow(i + 3).GetCell(1).SetCellValue(modellist[i].CheckXH.ToString());
                    sheet.GetRow(i + 3).GetCell(2).SetCellValue(modellist[i].CheckContent.Replace("\\r", "\n"));
                    sheet.GetRow(i + 3).GetCell(3).SetCellValue(modellist[i].CheckFZ.ToString());
                    sheet.GetRow(i + 3).GetCell(4).SetCellValue(modellist[i].CheckTemplate.Replace("\\r", "\n"));
                    sheet.GetRow(i + 3).GetCell(5).SetCellValue(modellist[i].CheckScore.ToString());
                    sheet.GetRow(i + 3).GetCell(6).SetCellValue(modellist[i].Remark);
                    dAllRow += GFun.SafeToDecimal(modellist[i].CheckScore);
                }
                sheet.GetRow(modellist.Count + 3).GetCell(1).SetCellValue(dAllRow.ToString());//得分              
            }
            SetExportFileName("制度考核考评表.xls", workbook);
        }

public static void SetExportFileName(string sFileName, HSSFWorkbook workbook)
        {
            System.Web.HttpContext.Current.Response.Charset = "GB2312";
            System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
            sFileName = System.Web.HttpUtility.UrlEncode(sFileName, System.Text.Encoding.UTF8);
            // 添加头信息,为"文件下载/另存为"对话框指定默认文件名 
            System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + sFileName);

            // 指定返回的是一个不能被客户端读取的流,必须被下载 
            System.Web.HttpContext.Current.Response.ContentType = "application/ms-Excel";

            // 把文件流发送到客户端 
            workbook.Write(System.Web.HttpContext.Current.Response.OutputStream);
            // 停止页面的执行 
            System.Web.HttpContext.Current.Response.End();
        }

1,FileStream file = new FileStream(strModelFile, FileMode.Open, FileAccess.Read);使用制定的路径,创建模式和读写权限初始化FileStream类的新实例

2,HSSFSheet sheet = (HSSFSheet)workbook.GetSheet("CheckDetail");  GetSheet()方法中参数要给excel模板中sheet页的名字

3,workbookd.write()最后的写操作很重要,相当于对excel进行保存操作

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值