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">
&nbsp;生产日期:
从:
<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的更多相关文章

  1. ASP.NET MVC 4.0 中使用NPOI 2.2.0 按模板生成Excel报表

    使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写.NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/ ...

  2. 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的路由方案,与原来的方案在使用上差别不 ...

  3. .Net NPOI 根据excel模板导出excel、直接生成excel

    一.根据Excel模板导出excel 1.导入NPOI.dll  2.DAL中添加类ExportExcel.cs using NPOI.SS.UserModel; using System; usin ...

  4. java通过FreeMarker模板生成Excel文件之.ftl模板制作

    关于怎么通过freemarker模板生成excel的文章很多,关键点在于怎么制作模板文件.ftl 网上的办法是: (1)把Excel模板的格式调好,另存为xml文件 (2)新建一个.ftl文件,把xm ...

  5. 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 ...

  6. PowerDesigner导入Excel模板生成实体

        在Excel里整理好的表模型数据,可直接导入PowerDesigner.此功能通过PowerDesigner的脚本功能来实现,使用起来也简单.具体操作方法:     打开PowerDesign ...

  7. Java上传下载excel、解析Excel、生成Excel

    在软件开发过程中难免需要批量上传与下载,生成报表保存也是常有之事,最近集团门户开发用到了Excel模版下载,Excel生成,圆满完成,对这一知识点进行整理,资源共享,有不足之处还望批评指正,文章结尾提 ...

  8. poi根据excel模板导出Excel

    /****单元格值对象**/public class Cells { /*** * 行 */ private int row; /** * 列 */ private int column; /** * ...

  9. 使用Aspose.Cells 根据模板生成excel里面的 line chart

    目的: 1.根据模板里面的excel数据信息,动态创建line chart 2.linechart 的样式改为灰色 3.以流的形式写到客户端,不管客户端是否装excel,都可以导出到到客户端 4.使用 ...

随机推荐

  1. ORACLE—002:Create创作型

    --用于工作的积累SQL ORACLE另外还有的类型.储过程.函数等的输入输入出. 以下看下创建. 使用方法 CREATE OR REPLACE TYPE 类型名称 AS OBJECT(  字段1   ...

  2. onethink和phpwind共享

    将onethink和phpwind数据库安装在一起.使用公用表前缀. 将onethink的member表点phpwind有user表 这是onethink在根文件夹的安装,phpwind安装在bbs的 ...

  3. css3 的box-sizing属性理解

    * { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } 有时候在某些项目中 ...

  4. 代码配置没有问题,为什么不回滚事务(要理解Mysql数据库引擎)

    在发展的前几天遇到的问题,在调试过程中发现配置service本次交易不工作层,更新后数据库抛出异常或成功,交易不会回滚.随后开始了各种检查,视图spring的事务是否配置正确,进入更新方法时是否开启了 ...

  5. iOS_21团购_发送请求【点评】数据

    结果表明,一个简单的请求: 用到的点评封装的类: 使用tableView简单展示: // // DealListController.m // 帅哥_团购 // // Created by beyon ...

  6. Android Notification (转)

    上回我们提到在4.0ICS之后,Google为Android平台的Notification这把“倚天剑”注入了更多新鲜的元素,使其更加实用美观.Notification的样式从此变得丰富起来,以适应于 ...

  7. Simditor图片上传

    上一篇文章(Simditor用法)仅仅是简单的默认配置,我们可自己定义工具栏button使其更丰富和实现上传图片功能 初始化编辑器 <script type="text/javascr ...

  8. git 配置多个SSH-Key(转)

    摘要 我们在日常工作中会遇到公司有个gitlab,还有些自己的一些项目放在github上.这样就导致我们要配置不同的ssh-key对应不同的环境. 目录[-] 1,生成一个公司用的SSH-Key 2, ...

  9. 网站的SEO以及它和站长工具的之间秘密(转)

    博客迁移没有注意 URL 地址的变化,导致百度和 google 这两只爬虫引擎短时间内找不到路.近段时间研究了下国内最大搜索引擎百度和国际最大搜索引擎google的站长工具,说下感受. 百度的站长工具 ...

  10. CentOS安装KVM步骤虚拟机,绝对实用!

    KVM(Kernel-based Virtual Machine)速记.这是rhel5.4最新的虚拟化技术启动,现在只支持红帽64位rhel5.4在执行KVM,硬件必须支持同一时间VT技术,网上找 ...