MVC +NPOI+AJAX 查询并生成excel 下载

Controller 代码:

 

public class SubArea2STIReportController : BaseController

    {

        [ActionDescription("分区2STI查询")]

        public ActionResult Index()

        {

            var vm = CreateVM<SubArea2STIReportVM>();

            return PartialView(vm);

        }

        [HttpPost]

        [ActionDescription("分区2STI查询")]

        public ActionResult Index(string NetworkStandard, string BusinessModel, string Model, string FinialYearStart, string FinialYearEnd)

        {

            if (string.IsNullOrEmpty(FinialYearStart))

            {

                var script = "Ext.Msg.alert('提示', '请填写开始时间');";

                return Content(script);

            }

            if (string.IsNullOrEmpty(FinialYearEnd))

            {

                var script = "Ext.Msg.alert('提示', '请填结束时间');";

                return Content(script);



            }

            else

            {

                string YearStartNumber = FinialYearStart.Substring(0, 4);

                string YearStart = YearStartNumber + @"-01-01";

                string YearEndNumber = FinialYearEnd.Substring(0, 4);

                string YearEnd = YearEndNumber + @"-01-01";

                int span = int.Parse(YearEndNumber) - int.Parse(YearStartNumber);

                if (span > 3)

                {

                    var script = "Ext.Msg.alert('提示', '系统最多可查询三年数据');";

                    return Content(script);



                }

                //查询条件

                SqlParameter[] parms = 

            {

                new SqlParameter("@NetworkStandard",NetworkStandard),

                new SqlParameter("@BusinessModel",BusinessModel),

                new SqlParameter("@Model",Model),

                new SqlParameter("@StartDate",YearStart),

                new SqlParameter("@EndDate",YearEnd)

            };

                //调用存储过程查询返回DataSet

                DataSet result = DC.Database.RunSP("Pro_UploadData_SubArea2STI", parms);

                if (result == null || result.Tables.Count < 1)

                {



                    var script = "Ext.Msg.alert('提示', '查询结果为空');";

                    return Content(script);



                }

                else

                {

                    //创建个excel

                    NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();

                    NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("分区2");

                    int columns = result.Tables[0].Columns.Count;

                    //添加第一行 

                    #region

                    string fy = "FY";

                    fy += FinialYearStart.Substring(2, 2);

                    fy += "累计";

                    NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(0);

                    row1.CreateCell(0).SetCellValue("分区");

                    row1.CreateCell(1).SetCellValue("省份");

                    row1.CreateCell(2).SetCellValue("STI累计");

                    row1.CreateCell(3).SetCellValue(fy);

                    for (int i = 0; i < columns - 4; i++)

                    {

                        //获取DataSet标题行,动态生成excel的标题  

                        string title = result.Tables[0].Columns[i+4].ColumnName.ToString() ;

                        string year = title.Substring(2, 2);

                        string month = String.Empty;

                        if (title.Length == 6)

                        {

                            month = title.Substring(5, 1);

                        }

                        else

                        {

                            month = title.Substring(5, 2);

                        }



                        switch (month)

                        {

                            case "1":

                                month = "Jan-";

                                break;

                            case "2":

                                month = "Feb-";

                                break;

                            case "3":

                                month = "Mar-";

                                break;

                            case "4":

                                month = "Apr-";

                                break;

                            case "5":

                                month = "May-";

                                break;

                            case "6":

                                month = "Jun-";

                                break;

                            case "7":

                                month = "Jul-";

                                break;

                            case "8":

                                month = "Aug-";

                                break;

                            case "9":

                                month = "Sep-";

                                break;

                            case "10":

                                month = "Oct-";

                                break;

                            case "11":

                                month = "Nov-";

                                break;

                            case "12":

                                month = "Dec-";

                                break;

                        }

                        title = month + year;

                        row1.CreateCell(i + 4).SetCellValue(title);

                    }

                    #endregion

                    //第二行开始添加数据

                    for (int r = 0; r < result.Tables[0].Rows.Count; r++)

                    {

                        NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(r+1);

                        for (int c = 0; c < columns; c++)

                        {

                            rowtemp.CreateCell(c).SetCellValue(string.IsNullOrEmpty(result.Tables[0].Rows[r][c].ToString()) ? "" : result.Tables[0].Rows[r][c].ToString());

                        }

                    }



                    System.IO.MemoryStream ms = new System.IO.MemoryStream();

                    book.Write(ms);

                    string fileguid = Guid.NewGuid().ToString();

                    //获取临时文件目录

                    string TempExportDir = ConfigurationSettings.AppSettings["TempExportDir"].ToString(); 

                    string Filepath = @TempExportDir + "\\" + fileguid + ".xls";

                    //在临时文件目录生成excel

                    System.IO.File.WriteAllBytes(Filepath, ms.ToArray());

                    string html = "<table class='form'><tr><td>文件已准备完毕,请点击下方链接下载</td></tr>";

                    html += "<tr><td><a href='#' onclick=\\\"LL_DownloadExportedFile('" + fileguid + "');return false;\\\">查询结果.xls</a></td></tr></table>";

                    var script2 = string.Format("var html = \"{3}\";FF_OpenPostDialog(\"{0}\", {1}, {2}, html, \"{4}\", {5});", "查询结果", 250, 100, html, "ExportExcel", 1);

                    return Content(script2);

                }

            }

        }

View代码:

@model MBGCPB3S.ViewModels.ReportData.SubArea2STIReportVMs.SubArea2STIReportVM

@using (Extjs.BeginForm(width: 400, flex: 1,id:"Excelform",labelWidth:160))

{

    using (Extjs.BeginItems())

    {

        using (Extjs.BeginFieldContainer(layout: ExtLayoutEnum.hbox))

        {

            Extjs.LabelAndComboBoxFor(x => x.FinialYearStart, x => x.FinialYear);

            Extjs.LabelAndComboBoxFor(x => x.FinialYearEnd, x => x.FinialYear);

        }

        using (Extjs.BeginFieldContainer(layout: ExtLayoutEnum.hbox))

        {



            Extjs.LabelAndComboBoxFor(x => x.NetworkStandard, x => x.NetworkStandards);

            Extjs.LabelAndComboBoxFor(x => x.BusinessModel, x => x.BusinessModels);

        }

        using (Extjs.BeginFieldContainer(layout: ExtLayoutEnum.hbox))

        {



            Extjs.LabelAndTextFor(x => x.Model);



        }

       

        using (Extjs.BeginFieldContainer(layout: ExtLayoutEnum.vbox, valign: ExtVBoxAlignEnum.center))

        {



            Extjs.Button(id: "postexcel", onClick: "events()",buttonText:"生成");



        }

     

        

    }



        

    

}



<script  type="text/javascript">

    function events() 

    {

        $(document).ready(function () {

            var NetworkStandard = $("input[name = 'NetworkStandard']").val();

            var BusinessModel = $("input[name = 'BusinessModel']").val();

            var Model = $("input[name = 'Model']").val();

            var FinialYearStart = $("input[name = 'FinialYearStart']").val();

            var FinialYearEnd = $("input[name = 'FinialYearEnd']").val();

            $.post('@BaseController.VirtualDir' + '/SubArea2STIReport/Index?NetworkStandard=' + NetworkStandard + '&BusinessModel=' + BusinessModel + '&Model=' + Model + '&FinialYearStart=' + FinialYearStart + '&FinialYearEnd=' + FinialYearEnd + '', function (s) { eval(s);});

            //生成一个对话框

            function FF_OpenPostDialog(Title, Width, Height, Html, DialogID, NoPost) {

                if (DONOTUSE_isCtrl == true) {

                    DONOTUSE_isCtrl = false;



                    var win = window.open("/Home/PopUpIndex", "_blank");

                    if (win.addEventListener) {

                        win.addEventListener('load', function () { $("body", win.document).append(Html); }, false);

                    } else if (win.attachEvent) {

                        win.attachEvent('onload', function () { $("body", win.document).append("<div id='DONOTUSE_POSTFORM'>" + Html + "</div>"); });

                    }

                }

                else {



                    var id = DialogID != undefined ? Ext.id() : DialogID;

                    var id2 = id + "div";

                    var win = new Ext.Window({

                        id: id,

                        layout: 'fit',

                        title: Title,

                        width: Width,

                        html: "<div id='" + id2 + "'>" + Html + "</div>",

                        height: Height,

                        modal: true,

                        maximizable: true,

                        autoScroll: false

                    });



                    if (NoPost == undefined) {

                        win.on("afterrender", function (self, eOpts) {

                            var form = $(self.el.dom).find("form:first");

                            $.post(form.attr("action"), form.serialize(), function (data) {

                                $(self.el.dom).find("#" + id2).html(data);

                                win.setHeight(null);

                                win.setWidth(null);

                                win.center();

                                CloseMask();

                            });

                        });

                        ShowMask();

                        win.showAt(-2000, -2000);

                    }

                    else {

                        win.show();

                    }

                }

            }





        });

    };

   //生成个隐藏的form点击时,跳转到controller 

       function LL_DownloadExportedFile(Filepath) {

        var newForm = $('<form>');

        newForm.attr("action", FormatUrl('/SubArea2STIReport/DownloadExportedFile'));

        newForm.attr("method", "post");

        newForm.attr("target", "hiddenpostif");

        var html = "<input type=\"hidden\" id=\"Filepath\" name = \"Filepath\" value=\"" + Filepath + "\" />";

        newForm.html(html);

        $("body").append(newForm);

        newForm.submit();

        newForm.remove();

    };

</script>

下载excel controller

        [HttpPost]

        [ActionDescription("下载文件")]

        public ActionResult DownloadExportedFile(string Filepath)

        {

            byte[] exceldata = System.IO.File.ReadAllBytes(@TempExportDir + "\\" + Filepath + ".xls");

            return File(exceldata, "application/x-excel", Filepath +".xls");

        }

 

你可能感兴趣的:(Excel)