Excel 솔 루 션 중 하나 인 NOPI 내 보 내기
19032 단어 Excel 내 보 내기
엑셀 내 보 내기 기능 은 많은 사람들 이 했 을 것 이 라 고 믿 지만 이 기능 을 실현 하 는 해결 방안 은 여러 가지 가 있 습 니 다.오늘 저 는 여러분 이 비교적 새로운 것 을 소개 하지 않 았 습 니 다.사실은 새 롭 지 않 습 니 다-!NPOI 라 고 합 니 다.EXCEl 의 가 져 오기 와 내 보 내기 작업 을 완벽 하 게 조작 할 수 있 습 니 다.코드 를 같이 봅 시다.
2.DLL 가 져 오기
NOPI 를 실현 하려 면 제3자 DLL 을 사용 해 야 합 니 다.공식 다운로드 주 소 는 다음 과 같 습 니 다.http://npoi.codeplex.com/
3.빅 데이터 양 가 져 오기 문제
엑셀 2003 의 모든 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 정말 좋아요.