您的位置:首页 > 编程语言 > C#

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

2017-04-25 16:33 603 查看
前台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);
// 停止页面的执行

4000
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进行保存操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: