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, ...
随机推荐
- SqlServer索引优化 查看碎片情况
本文引自 DBCC DBREINDEX重建索引提高SQL Server性能 查看碎片情况使用 dbcc showcontig 函数来进行 代码: --改成当前库 use DB_Name --创建变量 ...
- selenium+Python(生成html测试报告)
当自动化测试完成后,我们需要一份漂亮且通俗易懂的测试报告来展示自动化测试成果,仅仅一个简单的log文件是不够的 HTMLTestRunner是Python标准库unittest单元测试框架的一个扩展, ...
- 转 WINXP VBOX 给UBUNTU 加共享目录方法
1. 安装增强功能包(Guest Additions)安装好Ubuntu 9.04后,运行Ubuntu并登录.然后在VirtualBox的菜单里选择"设备(Devices)" -& ...
- 基于Metronic4.1的Bootstrap脚本样式说明
虽说Bootstrap作为当下最流行的响应式的UI,但是对于一些在Bootstrap基础上扩展的UI的资料算是少之又少.这里楼主结合这一个月的辛酸把那些脚本跟样式整理一下下... 关于Metronic ...
- 【Linux】Linux C socket 编程之UDP
发送方: /* * File: main.c * Author: tianshuai * * Created on 2011年11月29日, 下午10:34 * * 主要实现:发送20个文本消息,然后 ...
- wcf 基本配置
<system.serviceModel> <services> <service name="ServiceUpdater.ServiceUpdate&quo ...
- [转]OLAP的12条准则
OLAP的12条准则 Multidimensional conceptual view OLAP模型必须提供多维概念视图 User-analysts would view an enterprise ...
- ASP.Net Core MVC 网站在Windows服务器跑不起来
1.vs远程发布到服务器,浏览器访问,报错502 2.打开错误提示提供的网址参考 3.安装runtime,sdk,Hosting Bundle Installer,其他操作 .....发现并没有什么用 ...
- PowerShell 惠普打印机双面驱动自动设置已安装
win10系统,使用实验室的HP P2055dn打印机.每次关机重连后,都会把默认的双面打印机的设置改回“未安装”,需要手动改成“已安装”.感觉是个bug,win7的时候关机后状态还会保持. 每次连上 ...
- 第1天:jQuery效果
1.jQuery 语法 jQuery 语法是为 HTML 元素的选取编制的,可以对元素执行某些操作. 基础语法是:$(selector).action() 美元符号定义 jQuery 选择符(sele ...