NPOI mvc easyui 根据Excel模板 生成Excel
1、首先下载 NPOI https://npoi.codeplex.com/releases 只要dll 就好 示例代码库太难懂了。
NPOI 是一个开源 免费的 东西。而且不依赖 office。服务端 不安装 office 也行。
其实 这个跟 easyui 关系 不大。
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<link href="~/jquery-easyui-1.4.2/themes/icon.css" rel="stylesheet" />
<script src="~/jquery-easyui-1.4.2/locale/easyui-lang-zh_CN.js"></script>
<table id="tt" class="easyui-datagrid" title="Basic DataGrid" style="width: 700px; height: 500px"
data-options="rownumbers:true,autoRowHeight:false,
pagination:true,
toolbar:'#tb',footer:'#ft',
pageSize:,singleSelect:true,collapsible:true,url:'@Url.Action("GetGridJSON")',method:'get'">
<thead>
<tr>
<th data-options="field:'FlowNoInt',formatter:formatFlowNoInt,width:80">流水序号</th>
<th data-options="field:'ProductionNo',width:140">产品条码号</th>
<th data-options="field:'Color',width:40">颜色</th>
<th data-options="field:'Production_data',formatter:Production_data,width:120">生产日期</th>
<th data-options="field:'Author',width:50">工号</th>
</tr>
</thead>
</table>
<div id="tb" style="padding: 2px 5px;">
<input class="easyui-textbox" id="ProductionNo" name="ProductionNo" data-options="prompt:'输入产品条码号:'" style="height: 22px; width: 120px">
生产日期:
从:
<input id="dd1" name="dd1" class="easyui-datebox"></input>
至:
<input id="dd2" name="dd2" class="easyui-datebox"></input>
<a href="#" class="easyui-linkbutton" onclick="doSearch()" iconcls="icon-search">Search</a>
<a href="#" class="easyui-linkbutton" onclick="ExportExcel()" iconcls="icon-search">导出</a>
</div>
<table id="DataGrid">
</table>
<script>
function formatFlowNoInt(val, row) {
var MANY_ZEROS = "";
if (typeof (val) != "string")
val = String(val);
return (MANY_ZEROS.substring(, - val.length)) + val;
}
function Production_data(val, row) {
if (val) {
return val.substr(, );
}
}
$(document).ready(function () {
$("#dd1").datebox("setValue", "@DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd")");
$("#dd2").datebox("setValue", "@DateTime.Now.AddDays(1).ToString("yyyy-MM-dd")");
$("input").css("font-size", "16px");
}
);
function doSearch() {
$('#tt').datagrid('load', {
ProductionNo: $('#ProductionNo').val(),
dd1: $('#dd1').datebox('getValue'),
dd2: $('#dd2').datebox('getValue')
});
}
function ExportExcel() {
//// 返回grid的所有可见行给后端供导出Excel用
//var rows = $('#tt').datagrid("getRows");
//if (rows.length == 0) {
// msgShow("没有数据可供导出");
// return;
//}
////返回grid的所有列的选项title、列宽等
//// var columns = $('#userlist').datagrid("options").columns;
////定制DataGrid的columns信息,只返回{field:,title:}
//var columns = new Array();
//var fields = $('#tt').datagrid('getColumnFields');
//for (var i = 0; i < fields.length; i++) {
// var opts = $('#tt').datagrid('getColumnOption', fields[i]);
// var column = new Object();
// column.field = opts.field;
// column.title = opts.title;
// columns.push(column);
//}
//var excelWorkSheet = new Object();
//excelWorkSheet.rows = rows;
//excelWorkSheet.columns = columns;
//excelWorkSheet.sheetName = "设置导出的Excel工作表名";
location.href = '@Url.Action("ExportSerialNumberList")' + '?ProductionNo=' + $('#ProductionNo').val()
+ '&dd1=' + $('#dd1').datebox('getValue') + '&dd2=' + $('#dd2').datebox('getValue');
}
</script>
<style>
.datagrid-cell {
font-size: 18px;
}
.datagrid-header .datagrid-cell span {
font-size: 18px;
}
</style>
ExportExcel() 注释 的那一段 是一个 遍历 easyui 的 datagrid 里面 行 ,然后 变成 json 传到 后台,我不喜欢这样,直接把查询 条件 传到 后台 不就好么。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using System.IO;
using System.Diagnostics;
using System.Web; namespace SerialNumberBuilder.Controllers
{
public class ReportController : Controller
{
//
// GET: /Report/
SerialNumberBuilder.Models.SerialNumber_DBEntities db = new Models.SerialNumber_DBEntities(); public ActionResult Index()
{
return View();
} public List<SerialNumberBuilder.Models.SerialNumberBuilder> Search()
{
var Temp = db.SerialNumberBuilder;
IQueryable<SerialNumberBuilder.Models.SerialNumberBuilder> TempIQueryable = Temp;
if (Request.QueryString["ProductionNo"] != null)
{
string TempStr = Request.QueryString["ProductionNo"].ToString();
TempIQueryable = Temp.Where(X => X.ProductionNo.Contains(TempStr));
}
DateTime dd1 = DateTime.Now.AddDays(-);//开始时间 默认 1年前
DateTime dd2 = DateTime.Now.AddDays();//
if (Request.QueryString["dd1"] != null && DateTime.TryParse(Request.QueryString["dd1"].ToString(), out dd1)
& Request.QueryString["dd2"] != null && DateTime.TryParse(Request.QueryString["dd2"].ToString(), out dd2)
)
{
TempIQueryable.Where(X => X.Production_data > dd1).Where(Y => Y.Production_data < dd2);
} return TempIQueryable.ToList();
} public string GetGridJSON()
{
JsonSerializerSettings set = new JsonSerializerSettings();
set.DateFormatHandling = ;
return JsonConvert.SerializeObject(Search(), Formatting.Indented, set); } public ActionResult ExportSerialNumberList()
{
String newfileName = DateTime.Now.ToString("yyyyMMddHHmmssff");
// String newFileName = Server.MapPath("/upfiles/user_" + newfileName + ".xls"); var list = Search(); //打开Excle模板文件
FileStream fileOne = new FileStream(Server.MapPath("/Contents/userModel.xls"), FileMode.Open, FileAccess.ReadWrite);
HSSFWorkbook wbOne = new HSSFWorkbook(fileOne); //获取第一个工作表
HSSFSheet sheet = (HSSFSheet)wbOne.GetSheetAt(); //从第二行开始插入数据(行索引是从0开始的)
int startRow = ; //循环插入数据
foreach (var item in list)
{
HSSFRow rowOne = (HSSFRow)sheet.CreateRow(startRow);
String userId = item.Author.ToString();
rowOne.CreateCell().SetCellValue(userId);
String userName = item.Color;
rowOne.CreateCell().SetCellValue(userName);
String passWord = item.ProductionNo;
rowOne.CreateCell().SetCellValue(passWord);
startRow = startRow + ;
} MemoryStream ms = new MemoryStream();
wbOne.Write(ms);
return File(ms.ToArray(), "application/vnd.ms-excel", HttpUtility.UrlEncode(string.Format("{0}.xls", newfileName))); } }
}
ExportSerialNumberList() 让我心烦了。本来 是 用 FileStream 生成 本地 文件 然后 return File (文件名,contentType)。
但是我发现 这个 临时文件 我没法删除。
然后 看了 返回 File 的方法重载。里面 有一个 支持Stream 的,我就 直接 return File(ms, "application/vnd.ms-excel", HttpUtility.UrlEncode(string.Format("{0}.xls", newfileName)));
结果 下载 下来 的文件 打开有问题,没数据。
网上 一查 还非要用 ms.ToArray() 才行。
NPOI mvc easyui 根据Excel模板 生成Excel的更多相关文章
- ASP.NET MVC 4.0 中使用NPOI 2.2.0 按模板生成Excel报表
使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写.NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/ ...
- ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 try.dot.net 的正确使用姿势 .Net NPOI 根据excel模板导出excel、直接生成excel .Net NPOI 上传excel文件、提交后台获取excel里的数据
ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 ASP.NET Core 从2.2版本开始,采用了一个新的名为Endpoint的路由方案,与原来的方案在使用上差别不 ...
- .Net NPOI 根据excel模板导出excel、直接生成excel
一.根据Excel模板导出excel 1.导入NPOI.dll 2.DAL中添加类ExportExcel.cs using NPOI.SS.UserModel; using System; usin ...
- java通过FreeMarker模板生成Excel文件之.ftl模板制作
关于怎么通过freemarker模板生成excel的文章很多,关键点在于怎么制作模板文件.ftl 网上的办法是: (1)把Excel模板的格式调好,另存为xml文件 (2)新建一个.ftl文件,把xm ...
- NPOI 2.1.1 系列(2) 使用NPOI读取List或者datatable数据生成 Excel文档 ;Npoi生成 xlsx 2007以上文档
结合上一篇文章 NPOI 2.1.1 系列(1) 使用NPOI读取 Excel文档 ;NpoiExcelHelper 导入导出 2003格式 2007格式的 Excel; Npoi 导出 xlsx ...
- PowerDesigner导入Excel模板生成实体
在Excel里整理好的表模型数据,可直接导入PowerDesigner.此功能通过PowerDesigner的脚本功能来实现,使用起来也简单.具体操作方法: 打开PowerDesign ...
- Java上传下载excel、解析Excel、生成Excel
在软件开发过程中难免需要批量上传与下载,生成报表保存也是常有之事,最近集团门户开发用到了Excel模版下载,Excel生成,圆满完成,对这一知识点进行整理,资源共享,有不足之处还望批评指正,文章结尾提 ...
- poi根据excel模板导出Excel
/****单元格值对象**/public class Cells { /*** * 行 */ private int row; /** * 列 */ private int column; /** * ...
- 使用Aspose.Cells 根据模板生成excel里面的 line chart
目的: 1.根据模板里面的excel数据信息,动态创建line chart 2.linechart 的样式改为灰色 3.以流的形式写到客户端,不管客户端是否装excel,都可以导出到到客户端 4.使用 ...
随机推荐
- 利用hibernate的session查询数据库,而且在jsp页面显示表内容的方法
试过了非常多种方法都没有成功,最终让我找到了这样的方法! 首先在后台写代码: Transaction tx = session.beginTransaction(); List list = sess ...
- poj2112 Optimal Milking --- 最大流量,二分法
nx一个挤奶器,ny奶牛,每个挤奶罐为最m奶牛使用. 现在给nx+ny在矩阵之间的距离.要求使所有奶牛挤奶到挤奶正在旅程,最小的个体奶牛步行距离的最大值. 始感觉这个类似二分图匹配,不同之处在于挤奶器 ...
- iOS 自己主动布局教程
springs和struts的问题 你肯定非常熟悉autosizing masks-也被觉得是springs&struts模式.autosizing mask决定了当一个视图的父视图大小改变时 ...
- n每个计数的概率和发生骰子--动态规划
称号:该n骰子在地板上.所有点骰子的向上一面和一个S.进入n,打印S所有可能的值的概率. 声明思想非原创!仅仅因动态规划思想的使用非常好,记下. 分析:动态规划就是分阶段考虑问题.给出变量.找出相邻阶 ...
- JAVA运行程序代码段
我记得那时候刚毕业.学习JAVA恐惧是这里,它是关于JAVA称号.我总是不正确.如今,这最后审查.看了好半天.得赶紧把刚才学习到的那点东西记下来. 一.关于static的代码段运行顺序 运行结果例如以 ...
- 华丽的网上突出代码组件CodeMirror
农民之间的代码懒惰性质:愚公绝不能过夜.一劳永逸永远不知疲倦!这是一个代码示例 动态配置,在不同的场景抽象为常见的配置逻辑加,这使得有可能"为一个全球性的代码.代码做搬运工",更糟 ...
- Androida规划nt打包
1.准备工作 (1)首先安装好ant工具 (2)生成keystore 在jdk的bin文件夹下 输入 keytool -genkey -alias android.keystore -keyalg R ...
- css Tab选项卡1
利用 锚点原理 以及overflow:hiden 结合,实现纯 css tab 方式 兼容ie6 + 适合单个tab 不需要js 注意点 红色方框的 a 对应a ...
- High Performance Browser Networking - TCP UDP TLS
延迟 定义和标准延迟 延迟简单地说,它是一种转移或信息包从起点到终点,所花费的时间. 延迟=发送延迟+传播延迟+处理延迟+排队延迟: Propagation delay 传播时延 传播时延这个概念.是 ...
- C++在设计和使用智能指针
为一个C++用户的.使用指针可以算的上是常态,但在使用过程中.多的时间,可能是由于new要么malloc对象,上次忘记的释放结束(我会犯这样一个错误).内存泄露. 而此时智能指针可能能够帮助我去解决问 ...