网页中一次导出多张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(对应多个老师的)?

原文地址:https://www.cnblogs.com/markwave/p/3512764.html