zoukankan      html  css  js  c++  java
  • 网页中一次导出多张Excel的问题

    最近在做一个教师成果管理系统,由于需求,需要将老师的各项成果以Excel导出。对于一个老师而言,我是通过导出一张Excel,然后里面有多张sheet,这个没什么问题。但是这里边有个系主任的更高权限的管理,就是当老师登入系统后,会判断老师的身份权限,如果是系主任,可以在对自己各项操作基础上,还能查看本系所有老师的基本信息,并且能将感兴趣的老师的成果以Excel导出。大家先看图:

    1、系主任登入系统后获取本系所有老师的列表(为了测试方便,只插入了2条记录):

    2、勾选完成后点击下方的导出按钮的效果图

    问题就在这里,为什么程序中有循环却只能导出一张Excel?   我们再来看下代码:

    复制代码
     1 protected void Button1_Click(object sender, EventArgs e)
     2         {
     3             for (int a = 0; a < this.GridView1.Rows.Count; a++)
     4             {
     5                 string t_id = this.GridView1.Rows[a].Cells[0].Text;
     6                 CheckBox cb = this.GridView1.Rows[a].FindControl("ChkItem") as CheckBox;
     7                 if (cb.Checked)
     8                 {
     9 
    10                     //.......................................................................................
    11                     NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
    12                     NPOI.SS.UserModel.ISheet sheet = book.CreateSheet("学科竞赛");
    13 
    14                     NPOI.SS.UserModel.IRow row = sheet.CreateRow(0);
    15                     row.CreateCell(0).SetCellValue("竞赛名称");
    16                     row.CreateCell(1).SetCellValue("指导老师");
    17                     row.CreateCell(2).SetCellValue("参与学生");
    18                     row.CreateCell(3).SetCellValue("获奖时间");
    19                     row.CreateCell(4).SetCellValue("奖项级别");
    20                     row.CreateCell(5).SetCellValue("获奖等级");
    21 
    22                     int i, j;
    23                     DataTable dt = new Discipline_competitionDAO().SelectDiscipline_competition(t_id);
    24                     for (i = 1; i <= dt.Rows.Count; i++)
    25                     {
    26                         for (j = 0; j < dt.Columns.Count; j++)
    27                         {
    28                             NPOI.SS.UserModel.IRow row2 = sheet.CreateRow(i);
    29                             row2.CreateCell(0).SetCellValue(dt.Rows[i - 1][2].ToString());
    30                             row2.CreateCell(1).SetCellValue(dt.Rows[i - 1][3].ToString());
    31                             row2.CreateCell(2).SetCellValue(dt.Rows[i - 1][4].ToString());
    32                             row2.CreateCell(3).SetCellValue(dt.Rows[i - 1][5].ToString());
    33                             row2.CreateCell(4).SetCellValue(dt.Rows[i - 1][6].ToString());
    34                             row2.CreateCell(5).SetCellValue(dt.Rows[i - 1][7].ToString());
    35 
    36                         }
    37                     }
    复制代码

     中间省略部分……

    复制代码
     1                     // 写入到客户端  
     2                  
     3                         System.IO.MemoryStream ms = new System.IO.MemoryStream();
     4                         book.Write(ms);
     5                         Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xls", DateTime.Now.ToString("yyyyMMddHHmmssfff")));
     6                         Response.BinaryWrite(ms.ToArray());
     7                         book = null;
     8                         ms.Close();
     9                         ms.Dispose();
    10                     
    11 
    12 
    13                 }
    14             }
    15         }
    复制代码

    3、下载并打开Excel

    各位园友大神们,小弟被这个问题困扰多时,难道真的不能成批导出多张Excel(对应多个老师的)?

  • 相关阅读:
    STM32 ~ J-LINK V8 修复
    转移文件
    linux
    STM32 ~ MDK环境下调试程序 HardFault_Handler 相关
    HR_ROS 节点信息
    STM32 ~ 串口DMA通道查找
    CodeBackUP_node_find_serial
    Java问题排查工具箱[转载]
    JDK1.7 ConcurrentHashMap 源码浅析
    JDK1.7 HashMap 源码分析
  • 原文地址:https://www.cnblogs.com/markwave/p/3512764.html
Copyright © 2011-2022 走看看