码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2014-11-17 13:47:18      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   io   color   ar   os   sp   

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");
        }

 

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

标签:des   style   blog   http   io   color   ar   os   sp   

原文地址:http://www.cnblogs.com/codediary/p/4103240.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!