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:10,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 = "000000000000000000";
        if (typeof (val) != "string")
            val = String(val);
        return (MANY_ZEROS.substring(0, 6 - val.length)) + val;
    }

    function Production_data(val, row) {
        if (val) {
            return val.substr(0, 10);
        }

    }
    $(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(-365);//开始时间 默认 1年前
            DateTime dd2 = DateTime.Now.AddDays(365);//
            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 = 0;
            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);

            //从第二行开始插入数据(行索引是从0开始的)
            int startRow = 1;

            //循环插入数据
            foreach (var item in list)
            {
                HSSFRow rowOne = (HSSFRow)sheet.CreateRow(startRow);
                String userId = item.Author.ToString();
                rowOne.CreateCell(0).SetCellValue(userId);
                String userName = item.Color;
                rowOne.CreateCell(1).SetCellValue(userName);
                String passWord = item.ProductionNo;
                rowOne.CreateCell(2).SetCellValue(passWord);
                startRow = startRow + 1;
            }

            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() 才行。
 
时间: 2024-08-29 06:35:03

NPOI mvc easyui 根据Excel模板 生成Excel的相关文章

Java学习之道:Java上传下载excel、解析Excel、生成Excel的问题

在软件开发过程中难免需要批量上传与下载,生成报表保存也是常有之事,最近集团门户开发用到了Excel模版下载,Excel生成,圆满完成,对这一知识点进行整理,资源共享,有不足之处还望批评指正,文章结尾提供了所需jar包的下载,方便大伙使用,下面言归正传! 1.Excel的下载 1)Action中: 添加响应事件,通过getRealPath获得工程路径,与jsp中获得request.getContextPath()效果相同,fileName为要下载的文件名,经过拼接filePath是xls文件的绝对

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

在软件开发过程中难免需要批量上传与下载,生成报表保存也是常有之事,最近集团门户开发用到了Excel模版下载,Excel生成,圆满完成,对这一知识点进行整理,资源共享,有不足之处还望批评指正,文章结尾提供了所需jar包的下载,方便大伙使用,下面言归正传! 1.Excel的下载 1)Action中: 添加响应事件,通过getRealPath获得工程路径,与jsp中获得request.getContextPath()效果相同,fileName为要下载的文件名,经过拼接filePath是xls文件的绝对

求教:c#根据模板生成excel模板,模板可编辑,且可以根据模板上的索引添加相应的值

大家好!我大概是这样,用c#写了一个界面,主要是仪器通信和打印报表,我负责打印报表的那块,我在网上找了一些资料,大概有几种生成方式,比如nopi epplus〈这都很简单〉也有一些参考程序,我的需求:1.找到一种生成报表的方式,能够根据Excel模板,读取模板后在其中对应的地方导入相应的程序,我现在能够实现行列坐标对应〈如图所示的一种方式〉2.实现报表的可编辑功能,1中的方式需要一个固定的映射关系,行列坐标对应,报表可编辑是指用户可以在自定义的Excel模板中插入一个标志,同时与c#建立链接,比

根据xlsx模板生成excel数据文件发送邮件代码

package mail; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStream; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util

Spring 中 AbstractExcelView 支持根据模板生成Excel文件. 通过设置 view 的 URL 属性指定模板的路径

 注意:1. 模板需放在 WEB-INF 目录下2. 指定模板路径时不需要添加扩展名, Spring将自动添加 .xls 到URL 属性中.3. 在指定URL前需先设置 view 的 ApplicationContext 1. 控制器配置 control-context.xml 1 <bean id="beanNameViewResolver" 2 class="org.springframework.web.servlet.view.BeanNameViewResol

jxls使用模板生成excel文件

http://www.aiduw.com/37/37897/6881409.html http://www.aiduw.com/37/37897/6881410.html http://www.aiduw.com/37/37897/6881411.html http://www.aiduw.com/37/37897/6881412.html http://www.aiduw.com/37/37897/6881413.html http://www.aiduw.com/37/37897/68814

XLSTransformer生成excel文件简单演示样例

项目结构图: 项目中所用到的jar,能够到http://www.findjar.com/index.x下载 ExcelUtil类源代码: package util; import java.io.IOException; import java.net.URL; import java.util.HashMap; import java.util.List; import java.util.Map; import net.sf.jxls.exception.ParsePropertyExcep

XLSTransformer生成excel一个简单的演示示例文件

项目结构图: 在这些项目中使用jar.可以http://www.findjar.com/index.x下载 ExcelUtil类源代码: package util; import java.io.IOException; import java.net.URL; import java.util.HashMap; import java.util.List; import java.util.Map; import net.sf.jxls.exception.ParsePropertyExcep

node生成excel,动态替换表格内容

这里使用的是exceljs模块, 好上手,易操作 1. 大致使用步骤 npm install exceljs // 引用var Excel = require('exceljs'); // 创建一个workbook对象: var workbook = new Excel.Workbook(); 2.  创建一个新的excel,自己设计样式 例子: function create () { let info = [ { identifier: '哈哈哈1', name1: '桥1', unit: