最近在做一个教师成果管理系统,由于需求,需要将老师的各项成果以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(对应多个老师的)?