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.使用 ...
随机推荐
- Windows Auzre 微软的云计算产品的后台操作界面
Windows Auzre 微软的云计算产品的后台操作界面,试用期,相比于阿里云后台操作不是人. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTmFvbG ...
- uva10954 - Add All(multiset功能)
题目:10954 - Add All 题目大意:求n个数的和,可是有点不一样的是题目要求计算最少花费.每次两个数相加,得到的那个数就是每次计算的cost. 解题思路:之前没有想到用multiset,自 ...
- Swift学习 --- 2.3和字符串
1.创建一个空字符串,并通过推理的字符串是空的 <span style="font-size:18px;"> var str = "" var st ...
- Visual Studio 2015使用EF6的CodeFirstFromDB模式操作Sqlite数据库时Provider问题
传送门 什么是CodeFristFromDB 问题:查询数据是遇到 “/”应用程序中的服务器错误. No Entity Framework provider found for the ADO.NET ...
- 左右TS分析流
字节.在TS流里能够填入非常多类型的数据.如视频.音频.自己定义信息等.他的包的结构为,包头为4个字节,负载为184个字节(这184个字节不一定都是有效数据.有一些可能为填充数据). 工作形式: 由于 ...
- Behavioral模式之Observer模式
1.意图 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,全部依赖于它的对象都得到通知并被自己主动更新. 2.别名 依赖(dependents).公布-订阅(Publish-Subscr ...
- mysql 解压缩和赋权
拉开拉链mysql紧凑根文件夹 注意ini配置文件的内容 basedir = D:\mysql-5.6.17-winx64 datadir = D:\mysql-5.6.17-winx64 por ...
- ServletRequest接口召回总结
<body> <form action="LoginServlet" method="post"> User:<input typ ...
- 彩色图像--色彩空间 YIQ 、YUV 、YCbCr 、YC1C2 和I1I2I3
学习DIP文章64天 转载请注明文章出处:http://blog.csdn.net/tonyshengtan .出于尊重文章作者的劳动,转载请标明出处.文章代码已托管,欢迎共同开发:https://g ...
- hdu 4407 Sum 容斥+当前离线
乞讨X-Y之间p素数,,典型的纳入和排除问题,列的求和运算总和的数,注意,第一项是最后一个项目数. 如果不改变到第一记录的答案,脱机处理,能保存查询,候,遇到一个操作1,就遍历前面的操作.把改动加上去 ...