導出Excel這個功能相信不少人都作過,可是實現這個功能解決方案有好幾種,今天我未你們介紹一種比較新的,其實也不新了- -!它叫NPOI,能夠完美操做EXCEl的導入和導出操做,讓咱們一塊兒看下代碼吧(都是園子裏大神寫的,我借鑑一下,望海涵)app
實現NOPI須要使用第三方DLL,官方下載地址是:http://npoi.codeplex.com/學習
你們都知道Excel2003每一個sheet最大的行數是65536,因此大於65535的數據須要寫入另外一個sheet裏,這裏是須要注意的。大數據
1 public void ProcessRequest(HttpContext context) 2 { 3 context.Response.ContentType = "application/x-excel"; 4 string filename = HttpUtility.UrlEncode("人員檔案.xls");//文件名進行url編碼,防止亂碼 5 context.Response.AddHeader("Content-Disposition", "attachment;filename=" + filename); 6 7 var list = bArchive.GetAllArchivesBase(); 8 9 HSSFWorkbook workBook = new HSSFWorkbook(); 10 ISheet sheet1 = workBook.CreateSheet("表單一"); 11 //sheet列表,防止記錄條數大於65535 12 List<NPOI.SS.UserModel.ISheet> sheetList = new List<NPOI.SS.UserModel.ISheet>(); 13 sheetList.Add(sheet1); 14 //給sheet1添加數據 15 SheetFirst(sheet1, workBook, list); 16 //給其餘sheet添加數據 從1開始:去掉第一個sheet +1是由於有一個表頭 17 int rows = list.Count + 1; 18 int p = rows % 65535 == 0 ? rows / 65535 : (rows / 65535) + 1; 19 for (int i = 1; i < p; i++) 20 { 21 ISheet sheet = workBook.CreateSheet("sheet" + (i + 1).ToString()); 22 //爲sheet添加數據 23 SheetElse(sheet, (i - 1) * 65535 + 65535, list); 24 } 25 // 寫入到客戶端 26 System.IO.MemoryStream ms = new System.IO.MemoryStream(); 27 workBook.Write(ms); 28 context.Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xls", DateTime.Now.ToString("yyyyMMddHHmmssfff"))); 29 context.Response.BinaryWrite(ms.ToArray()); 30 workBook = null; 31 ms.Close(); 32 ms.Dispose(); 33 } 34 35 //第一個Sheet,Excel最大行數是65536行 36 protected void SheetFirst(NPOI.SS.UserModel.ISheet sheet1, NPOI.HSSF.UserModel.HSSFWorkbook book, List<ArchivesBase> datalist) 37 { 38 //標題 39 NPOI.SS.UserModel.ICell cellTitle = sheet1.CreateRow(0).CreateCell(0); 40 //cellTitle.SetCellValue("水位月報表--" + drpCategory.SelectedItem.Text); 41 cellTitle.SetCellValue("人事檔案表"); 42 //設置標題行樣式 43 NPOI.SS.UserModel.ICellStyle style = book.CreateCellStyle(); 44 style.Alignment = NPOI.SS.UserModel.HorizontalAlignment.CENTER; 45 NPOI.SS.UserModel.IFont font = book.CreateFont(); 46 font.FontHeight = 20 * 20; 47 style.SetFont(font); 48 cellTitle.CellStyle = style; 49 //合併標題行 50 sheet1.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, 9)); 51 52 //給sheet1添加第一行的頭部標題 53 NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(1); 54 row1.CreateCell(0).SetCellValue("檔案號"); 55 row1.CreateCell(1).SetCellValue("姓名"); 56 row1.CreateCell(2).SetCellValue("性別"); 57 row1.CreateCell(3).SetCellValue("檔案類型"); 58 row1.CreateCell(4).SetCellValue("畢業時間"); 59 row1.CreateCell(5).SetCellValue("畢業學校"); 60 row1.CreateCell(6).SetCellValue("身份證"); 61 //將數據逐步寫入sheet1各個行 62 for (int i = 0; i < 65535; i++) 63 { 64 NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + 1); 65 rowtemp.CreateCell(0).SetCellValue(datalist[i].ArchivesNO == null ? "" : datalist[i].ArchivesNO.ToString()); 66 rowtemp.CreateCell(1).SetCellValue(datalist[i].PeopleName == null ? "" : datalist[i].PeopleName.ToString()); 67 rowtemp.CreateCell(2).SetCellValue(datalist[i].PeopleSex == null ? "" : datalist[i].PeopleSex.ToString()); 68 rowtemp.CreateCell(3).SetCellValue(datalist[i].ArchivesClass == null ? "" : datalist[i].ArchivesClass.ToString()); 69 rowtemp.CreateCell(4).SetCellValue(datalist[i].GraduateTime == null ? "" : datalist[i].GraduateTime.ToString()); 70 rowtemp.CreateCell(5).SetCellValue(datalist[i].ArchivesSchool == null ? "" : datalist[i].ArchivesSchool.ToString()); 71 rowtemp.CreateCell(6).SetCellValue(datalist[i].PeopleCardNO == null ? "" : datalist[i].PeopleCardNO.ToString()); 72 } 73 } 74 75 //其餘sheet 76 protected void SheetElse(NPOI.SS.UserModel.ISheet sheet, int j, List<ArchivesBase> datalist) 77 { 78 //將數據逐步寫入sheet1各個行 79 for (int i = 0; j + i < datalist.Count; i++)//65535 80 { 81 NPOI.SS.UserModel.IRow rowtemp = sheet.CreateRow(i); 82 rowtemp.CreateCell(0).SetCellValue(datalist[j + i].ArchivesNO == null ? "" : datalist[j + i].ArchivesNO.ToString()); 83 rowtemp.CreateCell(1).SetCellValue(datalist[j + i].PeopleName == null ? "" : datalist[j + i].PeopleName.ToString()); 84 rowtemp.CreateCell(2).SetCellValue(datalist[j + i].PeopleSex == null ? "" : datalist[j + i].PeopleSex.ToString()); 85 rowtemp.CreateCell(3).SetCellValue(datalist[j + i].ArchivesClass == null ? "" : datalist[j + i].ArchivesClass.ToString()); 86 rowtemp.CreateCell(4).SetCellValue(datalist[j + i].GraduateTime == null ? "" : datalist[j + i].GraduateTime.ToString()); 87 rowtemp.CreateCell(5).SetCellValue(datalist[j + i].ArchivesSchool == null ? "" : datalist[j + i].ArchivesSchool.ToString()); 88 rowtemp.CreateCell(6).SetCellValue(datalist[j + i].PeopleCardNO == null ? "" : datalist[j + i].PeopleCardNO.ToString()); 89 } 90 }
以上代碼園子裏有不少,o(∩_∩)o 我寫下來防止之後忘記,也順便學習下,話說這個NPOI真的很好用哦~~編碼