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. Python 获得Facebook用户有一个共同的兴趣Friends

    CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-8-13 @author: guaguastd @name: c ...

  2. 使用 gridfs-stream 存储文件遇到的一个坑。

    前一段时间参读了某个coder写的用 gridfs-stream 来存储文件,感觉不错就自己用 gridfs-stream 模块写了一个文件存储服务,但是发现存储的文件总是删不掉, 我调用的是GFS的 ...

  3. Oracle 如何提交手册Cluster Table事务

    环境遇到ora-00600 4000错误,该目的是参与cluster table,什么我这里有以下简单的模拟.以供参考! ++++创建一个测试表 ? 1 2 3 4 5 6 7 8 9 10 11 1 ...

  4. SQL Server审计功能入门:CDC(Change Data Capture)

    原文:SQL Server审计功能入门:CDC(Change Data Capture) 介绍 SQL Server 2008引入了CDC(Change Data Capture),它能记录: 1. ...

  5. Android使用代码消除App数据并重新启动设备

    /** * 使用代码消除App数据 * 我们不寻常的清除App数据,中找到相应的App * 然后选择其清除数据.以下给出代码实现. * * 注意事项: * 1 设备须要root * 2 该演示样例中删 ...

  6. c#左右socket连接超时控制方案

    之前有一个项目中使用Remoting技术.当远程地址无效或server不执行,访问远程对象的方法,它会经过几十秒的时间来抛出异常秒. 由于我使用tcp状态.因此,认为可以使用socket为了测试连接, ...

  7. 用命令行在github新建一个项目

    Github Repository API中说明了可以通过发送一个请求来认证,之后就能通过命令行自动新建远程仓库了. 认证 curl -u 'username' https://api.github. ...

  8. Online网站集

    http://tool.oschina.net/apidocs/    在线工具(IT技术工具)

  9. Swift的74标准功能

    Swift中共同拥有74个内建函数,可是在Swift官方文档("The Swift Programming Language")中仅仅记录了7中.剩下的67个都没有记录. 本文将列 ...

  10. Bind和Eval的区别详解

    原文:Bind和Eval的区别详解 1.简单描述Eval和Bind的区别 绑定表达式 <%# Eval("字段名") %> <%# Bind("字段名& ...