MVC中用NPOI导出Excel相关问题
情形1:可以直接带参数
前端页面:
@.ActionLink("导出Excel", "DownLoadExcel", new { 参数名= '参数值' }, new { style = "margin-right:10px;", @class = "btn btn-green search" })
style 和 class 都可以添加样式
controller导出方法(可以直接将Excel导出 浏览器建议用谷歌)
方法如下:
public System.Web.Mvc.FileResult DownLoadExcel(string Id)
{
int ClassId = Convert.ToInt32(Request["ClassId"]);
string[] titleList = new string[] { "编号", "学员姓名", "单位", "联系方式", "身份证号码", "缴费情况", "缴费方式", "所在班级", "备注信息" };
IList<MODEL.Train.V_TrainProgramDetail> list = GetData()//获取数据方法
//创建Excel文件的对象
NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
//添加一个sheet
NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("Sheet1");
//给sheet1添加第一行的头部标题
IRow headerrow = sheet1.CreateRow();
HSSFCellStyle headStyle = (HSSFCellStyle)book.CreateCellStyle();
HSSFFont font = (HSSFFont)book.CreateFont();
font.FontHeightInPoints = ;
font.Boldweight = ;
headStyle.SetFont(font);
for (int i = ; i < titleList.Length; i++)
{
ICell cell = headerrow.CreateCell(i);
cell.CellStyle = headStyle;
cell.SetCellValue(titleList[i]);
}
//将数据逐步写入sheet1各个行
for (int i = ; i < list.Count; i++)
{
NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + );
rowtemp.CreateCell().SetCellValue(list[i].Id.ToString());
rowtemp.CreateCell().SetCellValue(list[i].CompanyName);
rowtemp.CreateCell().SetCellValue(list[i].CompanyName);
rowtemp.CreateCell().SetCellValue(list[i].Phone);
rowtemp.CreateCell().SetCellValue(list[i].IDCard);
rowtemp.CreateCell().SetCellValue(list[i].IsPay.ToString());
rowtemp.CreateCell().SetCellValue(list[i].SignUpType.ToString());
rowtemp.CreateCell().SetCellValue(list[i].ClassName);
rowtemp.CreateCell().SetCellValue("");
}
// 写入到客户端
System.IO.MemoryStream ms = new System.IO.MemoryStream();
book.Write(ms);
ms.Seek(, SeekOrigin.Begin);
return File(ms, "application/vnd.ms-excel", "学员报名详情.xls");
}
情形2:不能直接带参数,需要用到ajax
前端页面:
<div class="modal-content">
<div class="modal-header" style="height:120px;">
<button type="button" class="close" data-dissmiss="modal" aria-hidden="true" onclick="CancleImportExcel()">×</button>
<h4 id="title">请选择时间范围</h4>
<div class="modal-dialog container">
<div class="row">
<div class="col-xs-6">
<input type="hidden" name="id" id="id" />
<label>订单开始时间:</label>
<span>
<input type="text" id="OrderStartTime" name="OrderStartTime" onclick="WdatePicker({ dateFmt:'yyyy-MM-dd HH:mm:ss' })" class="Wdate" />
</span>
</div>
<div class="col-xs-6">
<label>结束时间:</label>
<span>
<input type="text" id="OrderEndTime" name="OrderEndTime" onclick="WdatePicker({ dateFmt: 'yyyy-MM-dd HH:mm:ss' })" class="Wdate" />
</span>
</div>
</div>
</div>
</div>
<div class="modal-footer"><button type="button" class="btn btn-default" data-dissmiss="modal" onclick="Export()">确定</button>
</div>
</div> <script>
function Export() {
var param = {
OrderStartTime: $("#OrderStartTime").val(),
OrderEndTime: $("#OrderEndTime").val()
};
$.ajax({
url: '/Order/DownLoadExcel', //Controller名称和方法名
type: "POST",
dataType: "json",
data: param,
success: function (data) {
//重定向返回参数
location.href = "/Order/OutExcel?guid=" + data;
}
});
}
</script>
Controller方法如下:
public ActionResult DownLoadExcel()
{
#region 查询数据
string OrderStartTime = Convert.ToDateTime(Request["OrderStartTime"]).ToString("yyyy-MM-dd");
string OrderEndTime = Convert.ToDateTime(Request["OrderEndTime"]).AddDays().ToString("yyyy-MM-dd"); string[] titleList = new string[] { "序号", "订单编号", "收货人", "送货单位", "送货地址", "商品编号", "商品名称", "联系电话", "总价", "订单状态", "创建时间", "配送时间", "备注信息" };
IList<Model.Order.OrderInfo> list = OrderInfoBLL.GetOrdersInfoListByTime(OrderStartTime, OrderEndTime);
#endregion #region NPOI数据导出
//创建Excel文件的对象
NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
//添加一个sheet
NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("Sheet1");
//给sheet1添加第一行的头部标题
IRow headerrow = sheet1.CreateRow(); HSSFCellStyle headStyle = (HSSFCellStyle)book.CreateCellStyle();
HSSFFont font = (HSSFFont)book.CreateFont();
font.FontHeightInPoints = ;
font.Boldweight = ;
headStyle.SetFont(font);
for (int i = ; i < titleList.Length; i++)
{
ICell cell = headerrow.CreateCell(i);
cell.CellStyle = headStyle;
cell.SetCellValue(titleList[i]);
}
//将数据逐步写入sheet1各个行
for (int i = ; i < list.Count; i++)
{
NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + );
rowtemp.CreateCell().SetCellValue(i + );
rowtemp.CreateCell().SetCellValue(list[i].No);
rowtemp.CreateCell().SetCellValue(list[i].Receiver);
rowtemp.CreateCell().SetCellValue(list[i].Company);
rowtemp.CreateCell().SetCellValue(list[i].Address);
rowtemp.CreateCell().SetCellValue(list[i].CargoNo);
rowtemp.CreateCell().SetCellValue(list[i].CargoName);
rowtemp.CreateCell().SetCellValue(list[i].Phone);
rowtemp.CreateCell().SetCellValue(list[i].Prices.ToString());
rowtemp.CreateCell().SetCellValue(list[i].Status == ? "待审核" : list[i].Status == ? "已审核待收货" : list[i].Status == ? "已收货已完成" : "取消审核不通过");
rowtemp.CreateCell().SetCellValue(list[i].CreateDate.ToString("yyyy-MM-dd"));
rowtemp.CreateCell().SetCellValue(list[i].DeliveryTime.ToString("yyyy-MM-dd HH:mm"));
rowtemp.CreateCell().SetCellValue("");
}
var guid = Guid.NewGuid().ToString();
DownLoadHelper.SetCache(guid, book);
return Json(guid, JsonRequestBehavior.AllowGet);
#endregion
}
public void OutExcel(string guid)
{
object obj = DownLoadHelper.GetCache(guid);
NPOI.HSSF.UserModel.HSSFWorkbook book = obj as NPOI.HSSF.UserModel.HSSFWorkbook;
if (book != null)
{
//写入到客户端
MemoryStream ms = new MemoryStream();
book.Write(ms);
Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}.xls", DateTime.Now.ToString("yyyyMMddHHmmssfff")));
Response.BinaryWrite(ms.ToArray());
book = null;
ms.Close();
ms.Dispose();
}
DownLoadHelper.RemoveAllCache(guid);
}
就是在Controller不支持直接导出Excel的时候 分两步骤 1: 要先将导出内容保存在缓存中 2: 利用ajax的重定向再将Excel数据导出
下面是DownLoadHelper类方法:
public class DownLoadHelper
{
#region 获取缓存
public static object GetCache(string cacheKey)
{
System.Web.Caching.Cache objCache = HttpRuntime.Cache;
return objCache[cacheKey];
}
#endregion #region 设置数据缓存
public static void SetCache(string cacheKey, object objObject)
{
System.Web.Caching.Cache objCache = HttpRuntime.Cache;
objCache.Insert(cacheKey, objObject);
} public static void SetCache(string cacheKey, object objObject, TimeSpan timeOut)
{
System.Web.Caching.Cache objCache = HttpRuntime.Cache;
objCache.Insert(cacheKey, objObject, null, DateTime.MaxValue, timeOut, System.Web.Caching.CacheItemPriority.NotRemovable, null);
} public static void SetCache(string cacheKey, object objObject, DateTime absoluteExpiration, TimeSpan slidingExpiration)
{
System.Web.Caching.Cache objCache = HttpRuntime.Cache;
objCache.Insert(cacheKey, objObject, null, absoluteExpiration, slidingExpiration);
} #endregion #region 移除数据缓存
public static void RemoveAllCache(string cacheKey)
{
System.Web.Caching.Cache _cache = HttpRuntime.Cache;
_cache.Remove(cacheKey);
} public static void RemoveAllCache()
{
System.Web.Caching.Cache _cache = HttpRuntime.Cache;
IDictionaryEnumerator cacheEnum = _cache.GetEnumerator();
while (cacheEnum.MoveNext())
{
_cache.Remove(cacheEnum.Key.ToString());
}
}
#endregion
}
希望能对遇到此类问题的朋友有所帮助!
MVC中用NPOI导出Excel相关问题的更多相关文章
- ASP.NET MVC 使用NPOI导出Excel 无法访问已关闭的流(转)
第一步重写MemoryStream , 让它不能自动关闭. //新建类 重写Npoi流方法 public class NpoiMemoryStream : MemoryStream { public ...
- asp.net Mvc 使用NPOI导出Excel文件
1.新建MVC项目,新建控制器.视图 添加控制器: 添加视图(将使用布局页前面的复选框里的勾勾去掉) 2.在Models里新建一个类 public class Shop { /// <summa ...
- 共享一个MVC通过NPOI导出excel的通用方法
public static System.IO.MemoryStream ExportExcel<T>(string title, List<T> objList, param ...
- NPOI导出excel(带图片)
近期项目中用到Excel导出功能,之前都是用普通的office组件导出的方法,今天尝试用下NPOI,故作此文以备日后查阅. 1.NPOI官网http://npoi.codeplex.com/,下载最新 ...
- 使用NPOI导出Excel文件
使用NPOI导出Excel文件,本实例使用了ASP.NET MVC. 1.使用NPOI导出Excel文件 实例:导出商品列表. 要求:1.通过NPOI导出导出商品列表信息: 2.使用Excel函数计算 ...
- NPOI导出Excel (C#) 踩坑 之--The maximum column width for an individual cell is 255 charaters
/******************************************************************* * 版权所有: * 类 名 称:ExcelHelper * 作 ...
- Asp.Net 使用Npoi导出Excel
引言 使用Npoi导出Excel 服务器可以不装任何office组件,昨天在做一个导出时用到Npoi导出Excel,而且所导Excel也符合规范,打开时不会有任何文件损坏之类的提示.但是在做导入时还是 ...
- NPOI导出EXCEL 打印设置分页及打印标题
在用NPOI导出EXCEL的时候设置分页,在网上有查到用sheet1.SetRowBreak(i)方法,但一直都没有起到作用.经过研究是要设置 sheet1.FitToPage = false; 而 ...
- .NET NPOI导出Excel详解
NPOI,顾名思义,就是POI的.NET版本.那POI又是什么呢?POI是一套用Java写成的库,能够帮助开发者在没有安装微软Office的情况下读写Office的文件. 支持的文件格式包括xls, ...
随机推荐
- 关于typedef的用法
参考:http://www.cnblogs.com/csyisong/archive/2009/01/09/1372363.html https://wenda.so.com/q/1471668835 ...
- 高版本sonar安装遇到的坑-sonar 6.7.5
最近安装了6.7.5版本的sonar,发现里面的坑还是很多,下面列举下遇到的坑 sonar插件地址:https://docs.sonarqube.org/display/PLUG/Plugin+Lib ...
- openerp学习笔记 domain 的应用
1.在Action中定义,domain用于对象默认的搜索条件: 示例: <record id="action_orders" model="ir.actions.a ...
- MySQL查询操作select
查找记录 SELECT select_expr [,select_expr ...] [ FROM table_references(表的参照) [WHERE where_condition](条件) ...
- Zookeeper概念学习系列之paxos协议
不多说,直接上干货! 前言 一种最终一致的算法,paxos算法. paxos算法是由大牛lamport发明的,关于paxos算法有很多趣事.比如lamport论文最初由故事描述来引入算法,以至于那班习 ...
- 026-log4j配置文件模板
模板一: ### direct log messages to stdout ### log4j.appender.stdout=org.apache.log4j.ConsoleAppender lo ...
- 通过Jscript中@cc_on 语句识别IE浏览器及版本的代码
激活条件编译支持. @cc_on 备注 @cc_on 语句激活脚本引擎中的条件编译. 强烈推荐在注释中使用 @cc_on 语句,以使不支持条件编译的浏览器将您的脚本视为有效语法而接受它: /*@cc_ ...
- 新时代运维重器 Tencent Hub 最佳实践——云+未来峰会开发者专场回顾
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 演讲者:邹辉 腾讯云 PaaS 产品总监 背景:5月23-24日,以"焕启"为主题的腾讯"云+未来" ...
- Hibernate项目环境搭建
1.首先在eclipse里面新建一个Java工程. 2.在数据库中新建一个数据库(无需创建表,有Hibernate生成). 3.在项目中导入Hibernate所依赖的jar包,该jar包可以在此下载: ...
- mongodb配置文件与启动
数据库配置文件 mongo.cnf #日志文件位置 logpath=/data/db/journal/mongodb.log (这些都是可以自定义修改的) # 以追加方式写入日志 logappend= ...