小弟正在维护一个系统,系统里有个数据导出的功能,将一些信息读出来之后先显示在gridview中,然后可以按多种方式将gridview中的数据导入到excel中,其中可以按月份、年、季度导入到excel中。
问题如下:
比如可以将10月份的数据导出到excel中,速度也还可以;但是如果按季度导入到excel中,浏览器的进度条总是在大概1/3处卡住不动了,卡了几十分钟了。月份的记录大概200多条,按季度查出来的数据有900多条。
大概情况就是这样,求大虾指点excel导出

解决方案 »

  1.   

    可能是代码问题,也可能是数据量问题,excel对导出的数据行好像是有限制的
      

  2.   

    代码如下
    //导出excel文件 
    protected void btn_down_Click(object sender, EventArgs e)
        {
            //转成Excel并保存在附件目录下
            System.Data.DataTable dt = getDataTable();        GetExcel(dt, title);
            GridView1.Visible = true;
            
            String proj_no = (String)Session["proj_no"];        
            string filename = "计价监管通知书" + Label4.Text.ToString().Substring(5, Label4.Text.ToString().Length - 5) + "台账表";
            String filePath = Server.MapPath("~/proj_info" + "//" + filename + ".xls");
           
            FileInfo fi = new FileInfo(filePath);
            if (fi.Exists)
            {
                HttpResponse contextResponse = HttpContext.Current.Response;
                contextResponse.Redirect(string.Format("~/proj_info/{0}", "//" + filename + ".xls"), false);
            }
            else
            {
                Response.Write("<script>alert('此文件不存在,不能下载!')</script>");
            }    }   生成excel
    private void GetExcel(System.Data.DataTable dt, string name)
        {
            int col = dt.Columns.Count;
            int row = dt.Rows.Count;        Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();//Excel表格
            app.Visible = false;
            Workbooks workbooks = app.Workbooks;
            _Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet);
            Sheets sheets = workbook.Worksheets;//新建工作页        _Worksheet worksheet = (_Worksheet)sheets.get_Item(1);        worksheet.Cells.NumberFormatLocal = "@";
            Range rangeTitle = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[1, col]);
            rangeTitle.Merge(0);
            rangeTitle.HorizontalAlignment = XlHAlign.xlHAlignCenter;
            rangeTitle.Font.Size = 16;
            rangeTitle.Font.Bold = true;
            rangeTitle.Value2 = name;        Range rangeData = worksheet.get_Range(worksheet.Cells[2, 1], worksheet.Cells[2, col]);
            rangeData.Merge(0);
            rangeData.HorizontalAlignment = XlHAlign.xlHAlignCenter;
            rangeData.Font.Size = 12;
            rangeData.Value2 = Label4.Text;
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                string col_name = dt.Columns[i].Caption.ToString();
                switch (col_name)
                {
                    case "序号":
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).Merge(0);
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).HorizontalAlignment = XlHAlign.xlHAlignCenter;
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).ColumnWidth = 5;
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).Value2 = "序号"; break;
                    case "委托单位":
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).Merge(0);
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).HorizontalAlignment = XlHAlign.xlHAlignCenter;
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).ColumnWidth = 10;
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).Value2 = "委托单位"; break;
                    case "咨询单位":
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).Merge(0);
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).HorizontalAlignment = XlHAlign.xlHAlignCenter;
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).ColumnWidth = 10;
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).Value2 = "咨询单位"; break;
                    case "工程名称":
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).Merge(0);
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).HorizontalAlignment = XlHAlign.xlHAlignCenter;
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).ColumnWidth = 10;
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).Value2 = "工程名称"; break;
                    case "工程地点":
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).Merge(0);
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).HorizontalAlignment = XlHAlign.xlHAlignCenter;
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).ColumnWidth = 10;
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).Value2 = "工程地点"; break;
                    case "投资额":
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).Merge(0);
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).HorizontalAlignment = XlHAlign.xlHAlignCenter;
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).ColumnWidth = 10;
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).Value2 = "投资额"; break;
                    case "建设规模":
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).Merge(0);
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).HorizontalAlignment = XlHAlign.xlHAlignCenter;
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).ColumnWidth = 10;
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).Value2 = "建设规模"; break;
                    case "资质咨询证号":
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).Merge(0);
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).HorizontalAlignment = XlHAlign.xlHAlignCenter;
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).ColumnWidth = 15;
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).Value2 = "资质咨询证号"; break;
                    case "资质咨询等级":
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).Merge(0);
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).HorizontalAlignment = XlHAlign.xlHAlignCenter;
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).ColumnWidth = 15;
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).Value2 = "资质咨询等级"; break;
                    case "编制时间1":
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).Merge(0);
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).HorizontalAlignment = XlHAlign.xlHAlignCenter;
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).ColumnWidth = 15;
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).Value2 = "编制时间1"; break;
                    case "编制时间2":
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).Merge(0);
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).HorizontalAlignment = XlHAlign.xlHAlignCenter;
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).ColumnWidth = 15;
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).Value2 = "编制时间2"; break;
                    case "咨询费":
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).Merge(0);
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).HorizontalAlignment = XlHAlign.xlHAlignCenter;
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).ColumnWidth = 15;
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).Value2 = "咨询费"; break;
                    case "核准内容":
                        worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[3, i + 1]).Merge(0);