zoukankan      html  css  js  c++  java
  • ASP.NET MVC Ajax下载文件(使用NPOI向现有的excel模板文件里面添加数据)

    View

    Html.DevExpress().Button(DevExpressButtonHelper.AddButton(ViewBag.Form, "Export", "Export", 70, false)).GetHtml();
    

    Javascript

    调用StoreLocalViewData controller的方法主要是用来把传入export的参数, 然后使用(ViewDataDictionary)LocalViewData 存储. 
    var url = "@Url.Action("BillExportFile", ViewBag.Controller)"; 这个是在controller里面从数据获取需要导出的数据, 然后返回一个文件.
    function MainExport(){
        
            var la_HAWB = GetSelectedValueByField(MainGridView,"HAWB",1);
            if(la_HAWB.length == 0 )
            {
                Messagebox("1012","","","","0")
                return false;
            }
            var ljs_Json = GenerateJson("HAWB", la_HAWB,"String");
            ljs_Json = "["+ ljs_Json.substring(0, ljs_Json.length - 1)+"]";
             
            $.ajax({
                url: '@Url.Action("StoreLocalViewData", ViewBag.Controller)',
                type: "POST",
                dataType: "html",
                //async: false,
                beforeSend:function () {
                    lplLoadingPanel.Show();
                },
                data:
                    {
                        "ajs_Value":ljs_Json
                    },
                success: function (data) {
                    var url = "@Url.Action("BillExportFile", ViewBag.Controller)";
                    window.location = url;
    
                    lplLoadingPanel.Hide();
                }
            });
        }
    

      

    Controller

            public void StoreLocalViewData(string ajs_Value)
            {
                LocalViewData["BillExportFile_Json"] = ajs_Value;
            }
            
            public FileResult BillExportFile()
            {
                DataTable ldt_DataTable = null;
                string ls_ExcelPath = "";
                using (var db = new agilitycpEntities())
                {
    
                    ls_ExcelPath = db.sp_Sys_getSysPar("DOCUMENT", "CFS_RPT_FLIGHTPLAN").Select(c=>c.Value).FirstOrDefault();
                    ls_ExcelPath = Server.MapPath(ls_ExcelPath);
                }
    
            //从数据获取数据, 然后存储DataTable
                  ldt_DataTable = DBUtils.ExecuteStoredProceReturnDataSet("sp_rpt_CFS_Report_FlightPlan", User.Identity.Name, (string)LocalViewData["BillExportFile_Json"], "Con_Shp", "getMainGrid").Tables[0];            //将获取的数据使用NPOI组件生成excel文件. 
                MemoryStream stream = ExcelHelper.DataTableToExcel(ldt_DataTable, ls_ExcelPath,2,true);
                stream.Seek(0, SeekOrigin.Begin);
              //更改文件名后 return回去.
                string ls_filename = "Flight Plan" + DateTime.Now.ToString("yyyyMMdd") + "_" + User.Identity.Name + ".xls";
                return File(stream, "application/vnd.ms-excel", ls_filename);
            }
    

      

    ExcelHelper

    using NPOI.HSSF.UserModel;
    using NPOI.SS.UserModel;
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.IO;
    using System.Linq;
    using System.Web;
    using System.Web.UI.WebControls;
    using System.Web.Script.Serialization;
    using NPOI.XSSF.UserModel;
    
    namespace AgilityNorthAsiaPlatform.Code.Helpers
    {
        public class ExcelHelper
        {
    
            public static MemoryStream ExportDataTableToExcel(DataTable adt_DataTable)
            {
                try
                {
                    //文件流对象
                    MemoryStream stream = new MemoryStream();
                    if (adt_DataTable == null)
                    {
                        return stream;
                    }
                    //打开Excel对象
                    HSSFWorkbook workbook = new HSSFWorkbook();
    
                    //Excel的Sheet对象
                    var sheet = workbook.CreateSheet("sheet1");
    
                    //set date format
                    var cellStyleDate = workbook.CreateCellStyle();
                    var format = workbook.CreateDataFormat();
                    cellStyleDate.DataFormat = format.GetFormat("yyyyMMdd");
    
                    //使用NPOI操作Excel表
                    var row = sheet.CreateRow(0);
                    int count = 0;
                    for (int i = 0; i < adt_DataTable.Columns.Count; i++) //生成sheet第一行列名 
                    {
                        var cell = row.CreateCell(count++);
                        cell.SetCellValue(adt_DataTable.Columns[i].Caption);
                    }
                    //将数据导入到excel表中
                    for (int i = 0; i < adt_DataTable.Rows.Count; i++)
                    {
                        var rows = sheet.CreateRow(i + 1);
                        count = 0;
                        for (int j = 0; j < adt_DataTable.Columns.Count; j++)
                        {
                            var cell = rows.CreateCell(count++);
                            Type type = adt_DataTable.Rows[i][j].GetType();
                            if (type == typeof(int) || type == typeof(Int16)
                                || type == typeof(Int32) || type == typeof(Int64))
                            {
                                cell.SetCellValue(Convert.ToInt32(adt_DataTable.Rows[i][j]));
                            }
                            else
                            {
                                if (type == typeof(float) || type == typeof(double) || type == typeof(Double))
                                {
                                    cell.SetCellValue((Double)adt_DataTable.Rows[i][j]);
                                }
                                else
                                {
                                    if (type == typeof(DateTime))
                                    {
                                        cell.SetCellValue(((DateTime)adt_DataTable.Rows[i][j]).ToString("yyyy-MM-dd HH:mm"));
                                    }
                                    else
                                    {
                                        if (type == typeof(bool) || type == typeof(Boolean))
                                        {
                                            cell.SetCellValue((bool)adt_DataTable.Rows[i][j]);
                                        }
                                        else
                                        {
                                            cell.SetCellValue(adt_DataTable.Rows[i][j].ToString());
                                        }
                                    }
                                }
                            }
                        }
                    }
    
                    //保存excel文档
                    sheet.ForceFormulaRecalculation = true;
    
                    workbook.Write(stream);
                    workbook = null;
                    //workbook.Dispose();
    
                    return stream;
                }
                catch (Exception ex)
                {
                    return new MemoryStream();
                }
            }
    
    
            public static FileStream ModifyExcelFromDataTable(DataTable adt_DataTable)
            {
                //文件流对象
                FileStream stream = null;
                try
                {
    
                    if (adt_DataTable == null)
                    {
                        return stream;
                    }
    
                    string ls_FileName = "North Asia Platform-Flight Plan_Template.xlsx";
                    string ls_ExcelPath = Path.Combine(System.Web.HttpContext.Current.Server.MapPath("~/FileUploads/"), ls_FileName);
                    XSSFWorkbook wk = null;
    
                    using (FileStream fs = File.Open(ls_ExcelPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                    {
                        //把xls文件读入workbook变量里,之后就可以关闭了
                        wk = new XSSFWorkbook(fs);
                        fs.Close();
                    }
                    ISheet sheet = wk.GetSheetAt(0);
                    IRow row = sheet.CreateRow(1);
                    ICell cell = row.CreateCell(0);
                    sheet.GetRow(2).GetCell(0).SetCellValue("AAAAAA");
    
                    //保存excel文档
                    sheet.ForceFormulaRecalculation = true;
    
                    stream = File.Open(ls_ExcelPath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
                    wk.Write(stream);
                    wk = null;
                    //stream.Close();
    
    
                    //打开Excel对象
                    //HSSFWorkbook workbook = new HSSFWorkbook();
                    return stream;
                }
                catch (Exception ex)
                {
                    return stream;
                }
            }
    
    
            public static MemoryStream DataTableToExcel(DataTable adt_DataTable, string as_FilePath, int ai_HeaderRowCount, bool ab_FristColumnUID)
            {
                int i = 0;
                int j = 0;
                int count = 2;
                ISheet sheet = null;
                MemoryStream stream = new MemoryStream();
                if (adt_DataTable == null)
                {
                    return stream;
                }
                if (ab_FristColumnUID)
                    adt_DataTable.Columns.RemoveAt(0);
    
    
                FileStream fs = null;
                IWorkbook workbook = null;
    
                fs = new FileStream(as_FilePath, FileMode.Open, FileAccess.Read);
                if (as_FilePath.IndexOf(".xlsx") > 0) // 2007版本
                    workbook = new XSSFWorkbook(fs);
                else if (as_FilePath.IndexOf(".xls") > 0) // 2003版本
                    workbook = new HSSFWorkbook(fs);
                try
                {
                    if (workbook != null)
                    {
                        sheet = workbook.GetSheetAt(0);
                    }
                    else
                    {
                        return stream;
                    }
                    IRow row = null;
                    if (ai_HeaderRowCount == 0)
                        row = sheet.CreateRow(1);
                    row = sheet.CreateRow(ai_HeaderRowCount);
    
                    for (i = 0; i < adt_DataTable.Rows.Count; ++i)
                    {
    
                        for (j = 0; j < adt_DataTable.Columns.Count; ++j)
                        {
                            row.CreateCell(j).SetCellValue(adt_DataTable.Rows[i][j].ToString());
                        }
                        ++count;
                        row = sheet.CreateRow(count);
                    }
                    workbook.Write(stream); //写入到excel
                    workbook = null;
                    return stream;
                }
                catch (Exception ex)
                {
                    return new MemoryStream();
                }
            }
    
    
        }
    }
  • 相关阅读:
    springboot 集成RabbitMQ
    服务接口API限流 Rate Limit 续
    服务接口API限流 Rate Limit
    聊下并发和Tomcat线程数
    java 线程池 异步任务
    Tomcat中更改网站根目录和默认页的配置方法
    QPS从0到4000请求每秒,谈达达后台架构演化之路
    分布式与集群是什么 ? 区别是什么?
    大型网站技术架构演变总结
    提升高并发量服务器性能解决思路
  • 原文地址:https://www.cnblogs.com/hesijian/p/9958276.html
Copyright © 2011-2022 走看看