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.使用 ...
随机推荐
- ORACLE—002:Create创作型
--用于工作的积累SQL ORACLE另外还有的类型.储过程.函数等的输入输入出. 以下看下创建. 使用方法 CREATE OR REPLACE TYPE 类型名称 AS OBJECT( 字段1 ...
- onethink和phpwind共享
将onethink和phpwind数据库安装在一起.使用公用表前缀. 将onethink的member表点phpwind有user表 这是onethink在根文件夹的安装,phpwind安装在bbs的 ...
- css3 的box-sizing属性理解
* { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } 有时候在某些项目中 ...
- 代码配置没有问题,为什么不回滚事务(要理解Mysql数据库引擎)
在发展的前几天遇到的问题,在调试过程中发现配置service本次交易不工作层,更新后数据库抛出异常或成功,交易不会回滚.随后开始了各种检查,视图spring的事务是否配置正确,进入更新方法时是否开启了 ...
- iOS_21团购_发送请求【点评】数据
结果表明,一个简单的请求: 用到的点评封装的类: 使用tableView简单展示: // // DealListController.m // 帅哥_团购 // // Created by beyon ...
- Android Notification (转)
上回我们提到在4.0ICS之后,Google为Android平台的Notification这把“倚天剑”注入了更多新鲜的元素,使其更加实用美观.Notification的样式从此变得丰富起来,以适应于 ...
- Simditor图片上传
上一篇文章(Simditor用法)仅仅是简单的默认配置,我们可自己定义工具栏button使其更丰富和实现上传图片功能 初始化编辑器 <script type="text/javascr ...
- git 配置多个SSH-Key(转)
摘要 我们在日常工作中会遇到公司有个gitlab,还有些自己的一些项目放在github上.这样就导致我们要配置不同的ssh-key对应不同的环境. 目录[-] 1,生成一个公司用的SSH-Key 2, ...
- 网站的SEO以及它和站长工具的之间秘密(转)
博客迁移没有注意 URL 地址的变化,导致百度和 google 这两只爬虫引擎短时间内找不到路.近段时间研究了下国内最大搜索引擎百度和国际最大搜索引擎google的站长工具,说下感受. 百度的站长工具 ...
- CentOS安装KVM步骤虚拟机,绝对实用!
KVM(Kernel-based Virtual Machine)速记.这是rhel5.4最新的虚拟化技术启动,现在只支持红帽64位rhel5.4在执行KVM,硬件必须支持同一时间VT技术,网上找 ...