关于npoi导出的问题,只能导出最后一个数据

问题描述

关于npoi导出的问题,只能导出最后一个数据
  public void Export(HttpContext context)
        {
            context.Response.ContentType = "application/vnd.ms-excel;charset=UTF-8";
            //文件名进行url编码,防止乱码
            string strFileName = HttpUtility.UrlDecode("班级平均分排名.xls");
            context.Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", strFileName));
            context.Response.Clear();
            //创建一个excel对象
            HSSFWorkbook hwb = new HSSFWorkbook();
            //文档摘要信息
            DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
            //公司
            dsi.Company = "四川大宇信息系统有限公司";
            //文档摘要信息
            SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
            //文档主题
            si.Subject = "班级平均分排名";
            //标题
            si.Title = "班级平均分排名";
            //添加到execl对象里
            hwb.DocumentSummaryInformation = dsi;
            hwb.SummaryInformation = si;
            //拿到需要绑定的subject表头
            List<string> n = context.Session["SubjectName"] as List<string>;

            #region 需要绑定的数据
            int ProId = Convert.ToInt32(context.Request["ProId"]);
            int GradesId = Convert.ToInt32(context.Request["GradesId"]);
            Proc_list_ClassAverageRank plc = new Proc_list_ClassAverageRank();
            Dictionary<string, object> dic = new Dictionary<string, object>();
            dic.Add("Id", ProId);
            dic.Add("GradesId", GradesId);
            IList<Hashtable> list = action.SelectAllRank(dic);
            IList<Hashtable> abc = new List<Hashtable>();

            foreach (Hashtable item_1 in list)
            {
                //Hashtable c用来储存要绑定的数据
                Hashtable c = new Hashtable();
                foreach (string item in n)
                {
                    if (item_1.ContainsKey(item))
                    {
                        //用于储存键值
                        string avgScroce = "";
                        string rank = "";
                        //如果数据不为空,进行字符串分割
                        if (item_1[item] != null)
                        {
                            string b = item_1[item].ToString();
                            string[] value = b.Split('_');
                            avgScroce = value[0].ToString();
                            avgScroce = Convert.ToDecimal(avgScroce).ToString("0.00");
                            rank = value[1];
                        }
                        //数据为空,赋值为0
                        else
                        {
                            avgScroce = "0";
                            rank = "0";
                        }
                        //remove 掉重复的班级名称,否则会报错
                        c.Remove("ClassName");
                        //添加需要的键值
                        c.Add("ClassName", item_1["ClassName"]);
                        c.Add(item + "pz", avgScroce);
                        c.Add(item + "pm", rank);

                    }
                }

                abc.Add(c);
            }
            #endregion
            ISheet sheet = hwb.CreateSheet("sheet1");
            //创建标题
            IRow row_title = sheet.CreateRow(0);
            IRow row_title_2 = sheet.CreateRow(1);
            IRow row_title_3 = sheet.CreateRow(2);
            ICell cell_title = row_title.CreateCell(0);
            //标题-1
            cell_title.SetCellValue(context.Request["Title"].ToString());
            ICellStyle style = hwb.CreateCellStyle();
            IFont font = hwb.CreateFont();
            //标题样式(标题-1)
            style.Alignment = HorizontalAlignment.Center;
            cell_title.CellStyle = style;

            //班级样式(标题-2)
            ICellStyle cellClassSubject = hwb.CreateCellStyle();
            cellClassSubject.Alignment = HorizontalAlignment.Center;

            ICell cell_Class = row_title_2.CreateCell(0);
            cell_Class.SetCellValue("班级");
            cell_Class.CellStyle = cellClassSubject;

            sheet.AddMergedRegion(new CellRangeAddress(1, 2, 0, 0));
            sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, n.Count * 2));
            //获选获取科目,生成标题
            for (int i = 0; i < n.Count; i++)
            {
                ICell cell_Subject = row_title_2.CreateCell((i + 1) * 2 - 1);
                cell_Subject.CellStyle = cellClassSubject;
                cell_Subject.SetCellValue(n[i].ToString());
                sheet.AddMergedRegion(new CellRangeAddress(1, 1, (i + 1) * 2 - 1, (i + 1) * 2));

                ICell cell_pz = row_title_3.CreateCell((i + 1) * 2 - 1);
                cell_pz.SetCellValue("平均分");
                cell_pz.CellStyle = cellClassSubject;
                ICell cell_pm = row_title_3.CreateCell((i + 1) * 2);
                cell_pm.SetCellValue("排名");
                cell_pm.CellStyle = cellClassSubject;
            }
            string[] n_l = new string[n.Count * 2];
            for (int i = 0; i < n.Count; i++)
            {
                n_l[i] = n[i] + "pz";
                n_l[i + 1] = n[i] + "pm";
            }
            //循环填充数据
            for (int i = 0; i < n.Count; i++)
            {
                string pz = n[i] + "pz";
                string pm = n[i] + "pm";
                for (int j = 0; j < abc.Count; j++)
                {
                    IRow row_content = sheet.CreateRow(j + 3);
                    foreach (DictionaryEntry item in abc[j])
                    {
                        ICell cell_Class_content;
                        ICell cell_content_pz;
                        ICell cell_content_pm;
                        if (item.Key.Equals("ClassName"))
                        {
                            cell_Class_content = row_content.CreateCell(0);
                            cell_Class_content.SetCellValue(item.Value.ToString());
                        }
                        else if (pz.Equals(item.Key.ToString()))
                        {
                            cell_content_pz = row_content.CreateCell((i + 1) * 2 - 1);
                            cell_content_pz.SetCellValue(item.Value.ToString());
                        }
                        else if (pm.Equals(item.Key.ToString()))
                        {
                            cell_content_pm = row_content.CreateCell((i + 1) * 2);
                            cell_content_pm.SetCellValue(item.Value.ToString());
                        }
                    }
                }
            }
            hwb.Write(context.Response.OutputStream);
        }

代码很长,动态添加行列还有合并,查询数据什么的估计是最后一点儿出问题了,在给列赋值的时候,只显示最后一条数据,前面的都没有

本来都有数据的、

时间: 2024-08-18 10:44:11

关于npoi导出的问题,只能导出最后一个数据的相关文章

visual studio-导出excel表 只能导出到服务器而本地缺没有,如何把excel导出到本地,详细过程 谢谢!

问题描述 导出excel表 只能导出到服务器而本地缺没有,如何把excel导出到本地,详细过程 谢谢! 用VS2013编写的.net程序,做好了一个导出按钮,需要的功能是把一个table表的内容导入到excel表中并按照一定的路径导出来,但是每次点击导出的时候总是导入到的是服务器的所属路径,本地路径却没有,如何做才能导出到本地路径呢?求大神指点. 解决方案 先导出到服务器上,然后再让客户端下载. 解决方案二: http://www.cnblogs.com/weixing/archive/2012

asp.net使用npoi读取excel模板并导出下载详解

 这篇文章主要介绍了asp.net使用npoi读取excel模板并导出下载的示例,大家参考使用吧 为什么要使用NPOI导出Excel?   一.解决传统操作Excel遇到的问题:   如果是.NET,需要在服务器端装Office,且及时更新它,以防漏洞,还需要设定权限允许.NET访问COM+,如果在导出过程中出问题可能导致服务器宕机. Excel会把只包含数字的列进行类型转换,本来是文本型的,Excel会将其转成数值型的,比如编号000123会变成123. 导出时,如果字段内容以"-"

水晶报表-怎么设置CrystalReportViewer导出报表时只能选择导出PDF?

问题描述 怎么设置CrystalReportViewer导出报表时只能选择导出PDF? 客户现在不想要导出word和Exel等功能,只想保留导出PDF功能,怎么样设置才能在选择导出时只能导出PDF吗?

npoi导出的时候只导出最后一条数据

问题描述 npoi导出的时候只导出最后一条数据 public void Export(HttpContext context) { context.Response.ContentType = "application/vnd.ms-excel;charset=UTF-8"; //文件名进行url编码,防止乱码 string strFileName = HttpUtility.UrlDecode("班级平均分排名.xls"); context.Response.Ad

Oracle数据泵导出导入与传统导出导入的区别

 估计有不少的朋友不清楚Oracle数据泵导出导入与传统导出导入的区别吧,下面小编为各位介绍一下,有兴趣的朋友不防进入一起参考.   先来看一下Oracle数据泵导出导入例子 1.首先建立目录: create directory 目录名称 as '数据库服务器上的一个目录',如:  create directory 别名 as 'd:\服务器目录名';  将导入或导出的文件放在这个目录下 2.导出及导入 以SID=orcl,导出dmp的账号为test,导入dmp的账号为test为例. 若将数据从

传统路径导出 VS 直接路径导出(oracle exp direct=y)

      Oracle 传统的Export与Import依旧被保留到11g,而且9i与10g有很多依旧使用Export与Import方式进行备份与恢复的企业.从Oracle 7.3开始,传统的exp导出程序提供两种的导出路径方式,一个是传统路径导出(Conventional Path Export),一个是直接路径导出(Direct Path Export).本文即是因最近客户的传统导入导出性能问题对此进行描述.   1.两者的差异    a. Conventional path Export

php导出csv文件,可导出前导0实例代码_php实例

实例一:可导出前导0 //导出csv格式文件 $data数据 $title_arr标题 $file_name文件名 function exportCsv($data,$title_arr,$file_name=''){ ini_set("max_execution_time", "3600"); $csv_data = ''; /** 标题 */ $nums = count($title_arr); for ($i = 0; $i < $nums - 1; +

开发的报表“资产负债表”,直接导出为EXCEL,导出后为空表,同一个账号用别人的电脑导出就是正确的

问题描述 开发的报表"资产负债表",直接导出为EXCEL,导出后为空表,同一个账号用别人的电脑导出就是正确的 开发的报表"资产负债表",直接导出为EXCEL,导出后为空表,同一个账号用别人的电脑导出就是正确的

Web页面数据导出方法概述之导出excel

前言:随着BS体系结构的广泛使用,相对应的数据保存技术也要改进,对应Web页面,也就是我们通常认识到的HTML文件,由标示关键字与数据混合组成的文件.Web页面数据导出简单地说,就是分离数据与格式,同时保存数据为另外一种格式.正文:分析HTTP Response等文件头信息,对如何处理Web页面非常有用,下面简单地介绍几种常用的方法,算是在技术上学习,非理论上学习.下面的代码分析如何通过修改http头文件,产生excel的文件供用户下载,以达到数据导出的功能.这种非实际在服务器端生成文件的优点就