文件流方式导出EXcle

第一步前端代码:文件流方式导出EXcle不能用Ajax方式,要用 window.location.href 的方式

 function HasReferToExcel() {
                         if (confirm("系一次最多导出10000笔数据,是否继续?")) {
                             window.location.href = "/ashx/Refer.ashx" 
                         }

         }

 

第二步后台的代码:我用的是ashx来写的

public void HasReferToExcel(HttpContext context)
        {


            try
            {
                    IList<Model.Refer> rfs;
                    int iTotalCount = 0;
                    rfs = new BLL.Refer(context).HasReferToExcel(1, 10000, sQuery, 1, out iTotalCount);
                    System.Text.StringBuilder sHtml = new System.Text.StringBuilder();
                    sHtml.Append("<table><tr>");
                    //sHtml.Append("<td>编号</td>");
                    //sHtml.Append("<td>初评编号</td>");
                    sHtml.Append("<td>估价员</td>");
                    sHtml.Append("<td>业务员</td>");
                    sHtml.Append("<td>中介银行</td>");
                    sHtml.Append("<td>回复日期</td>");
                    sHtml.Append("<td>物业地址</td>");
                    sHtml.Append("<td>楼盘名称</td>");
                    sHtml.Append("<td>楼栋</td>");
                    sHtml.Append("<td>房号</td>");
                    sHtml.Append("<td>建筑面积</td>");
                    sHtml.Append("<td>套内面积</td>");
                    sHtml.Append("<td>类型</td>");
                    sHtml.Append("<td>朝向</td>");
                    sHtml.Append("<td>景观</td>");
                    sHtml.Append("<td>竣工日期</td>");
                    sHtml.Append("<td>所在楼层</td>");
                    sHtml.Append("<td>总楼层</td>");
                    sHtml.Append("<td>电梯</td>");
                    sHtml.Append("<td>装修</td>");
                    sHtml.Append("<td>户型</td>");
                    sHtml.Append("<td>户型结构</td>");
                    sHtml.Append("<td>预估单价</td>");
                    sHtml.Append("<td>预估总值</td>");
                    sHtml.Append("<td>其他说明</td></tr>");
                    for (int i = 0; i < rfs.Count; i++)
                    {
                        sHtml.Append("<tr>");
                        //sHtml.Append("<td>" + inspectionTasks[i].TaskId + "</td>");
                        //sHtml.Append("<td>" + inspectionTasks[i].PreReportNo + "</td>");//初评编号
                        sHtml.Append("<td>" + rfs[i].Judger + "</td>");//估价员
                        sHtml.Append("<td>" + rfs[i].Inputer + "</td>"); //业务员
                        sHtml.Append("<td>" + rfs[i].BankName + "</td>");//中介银行
                        sHtml.Append("<td>" + rfs[i].ReplyTime + "</td>"); //回复日期
                        sHtml.Append("<td>" + rfs[i].Address + "</td>"); //物业地址
                        sHtml.Append("<td>" + rfs[i].ProjectName + "</td>");//楼盘名称
                        sHtml.Append("<td>" + rfs[i].BuildName + "</td>");//楼栋
                        sHtml.Append("<td>" + rfs[i].HouseName + "</td>");//房号
                        sHtml.Append("<td>" + rfs[i].BuildSize + "</td>");//建筑面积
                        sHtml.Append("<td>" + rfs[i].InBuildSize + "</td>");//套内面积
                        sHtml.Append("<td>" + rfs[i].PropertyType + "</td>");//类型
                        sHtml.Append("<td>" + rfs[i].FaceTo + "</td>");//朝向
                        sHtml.Append("<td>" + rfs[i].YtCount + "</td>");//景观
                        sHtml.Append("<td>" + rfs[i].OverDate + "</td>");//竣工日期
                        sHtml.Append("<td>" + rfs[i].AtLayer + "</td>");//所在楼层
                        sHtml.Append("<td>" + rfs[i].TotalLayer + "</td>");//总楼层
                        sHtml.Append("<td>" + rfs[i].HasDianTi + "</td>");//电梯
                        sHtml.Append("<td>" + rfs[i].Zhuangxiu + "</td>");//装修
                        sHtml.Append("<td>" + rfs[i].Hxjg + "</td>");//户型
                        sHtml.Append("<td>" + rfs[i].MgtStatus + "</td>");//户型结构
                        sHtml.Append("<td>" + rfs[i].JudgePrice + "</td>");//预估单价
                        //sHtml.Append("<td></td>");
                        sHtml.Append("<td>" + rfs[i].TotalPrice + "</td>");//预估总值
                        sHtml.Append("<td>" + rfs[i].JudgerText + "</td>");//其他说明
                    }


                    sHtml.Append("</table>");
                    BLL.Common.ExcelFile(context, sHtml.ToString(), "的物业" + DateTime.Today.ToShortDateString() + ".xls");
                
            }
            catch
            {
          


            }

    }

 

第三步是创建Excle文件流

 /// <summary>
        /// 创建Excel文件流
        /// </summary>
        /// <param name="context"></param>
        /// <param name="wb"></param>
        /// <param name="excelName"></param>
        public static void ExcelFile(HttpContext context, string sHtmlTableStr, string excelName)
        {
            #region 设置响应头(文件名和文件格式)


            //设置响应的类型为Excel
            context.Response.Charset = "gb2312";  //必须写,否则会有乱码
            context.Response.ContentEncoding = System.Text.Encoding.UTF8;  //必须写,否则会有乱码
            context.Response.ContentType = "application/vnd.ms-excel";

            //设置下载的Excel文件名

  context.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(excelName, System.Text.Encoding.UTF8).ToString());

            //Clear方法删除所有缓存中的HTML输出。但此方法只删除Response显示输入信息,不删除
            context.Response.Clear();
            #endregion
            // 写入到客户端
            byte[] array = System.Text.Encoding.GetEncoding("gb2312").GetBytes(sHtmlTableStr);
            context.Response.BinaryWrite(array);
            context.Response.End();
        }

 

 

第二种方法

 private static void ReferExcel(string sQuery, string name, HSSFWorkbook wb)
        {

   //设置导出到Excel时的格式

            ISheet sheet = wb.CreateSheet(name);

            //自动换行
            ICellStyle cellStyle1 = wb.CreateCellStyle();
            cellStyle1.WrapText = true;
            ICellStyle cellStyle2 = wb.CreateCellStyle();
            cellStyle2.Alignment = NPOI.SS.UserModel.HorizontalAlignment.CENTER;
            cellStyle2.VerticalAlignment = VerticalAlignment.CENTER;//垂直居中


            string sql = "    select top 5000 物业名称=a.proname+a.sBuild+a.sRoom,建筑面积=a.BuildSize,登记价=a.PriceRight,估价单价=a.JudgePrice,价格范围=a.JudgePrice_1,业务员=case when a.queryEmp='''' then c.name else queryEmp end,估价师=case when a.judger=0 then a.empname else d.name end,评估总值=a.TotalPrices,咨询日期=a.inputDate,银行名称=a.BankName,支行=a.SubBankName   from ((tzc_refer_1 a left join mrbaseinf c on a.inputer=c.EmpID) left join mrbaseinf d on d.empid=a.judger) left join wmControversy e on e.Coopid=a.id left join tzc_bankbase bk on bk.id=a.bankid  where "+sQuery+"";
            DataTable dt = SqlHelper.ExecuteDataTable(SqlHelper.connstr, sql);

         //循环出查出的数据
            for (int i = 0; i < dt.Rows.Count + 1; i++)
            {

                IRow row = sheet.CreateRow(i);
                for (int j = 0; j < dt.Columns.Count; j++)
                {

                  //当i=0时,就循环出表头的数据名称
                    if (i == 0)
                    {
                        ICell cell = row.CreateCell(j);
                        cell.SetCellValue(dt.Columns[j].ColumnName);
                    }
                    else
                    {

            //当i大于0时,循环出第一行的数据
                        ICell cell = row.CreateCell(j);
                        double dTemp = 0;

                        //判断是不是浮点型的数据
                        if (double.TryParse(dt.Rows[i - 1][j].ToString(), out dTemp))
                        {
                            cell.SetCellValue(dTemp);
                        }
                        else
                        {
                            cell.SetCellValue(dt.Rows[i - 1][j].ToString());
                        }
                    }

                }

            }

        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值