이점:
JXL은 중국어를 잘 지원하며 작업은 간단하며 방법은 이름과 의미에 따라 다릅니다.
JXL은 순수한 Java API로 플랫폼에서 완벽하게 수행합니다. 코드는 다시 쓰지 않고 Windows 또는 Linux에서 실행할 수 있습니다.
Excel 95-2000의 모든 버전을 지원합니다 (현재 Excel 2007을 지원할 수 있지만 아직 시도하지 않았다고 온라인으로 표시됩니다).
Excel 2000 표준 형식을 생성합니다
글꼴, 번호, 날짜 작업을 지원합니다
셀 특성을 수정할 수 있습니다
이미지와 차트가 지원되지만이 API는 그래픽 및 차트에 대한 지원이 제한되어 있으며 PNG 형식 만 인식합니다.
결점:
POI보다 비효율적이고 불완전한 그림 지원 및 형식에 대한 강력한 지원
사례:
String times = (new simpledateformat ( "yyyymmddhhmmss"). 형식 (new date ()); String fname = "System log" + times; // 파일 이름 목록 <logs> list = logsservice.selectforList (hql.toString ()); 문자열 path = requestSession (). getServletContext (). getRealPath ( "/") + "xls/" + (new SimpledateFormat ( "yyyymmdd)). 형식 (new Date ()); 파일 = 새 파일 (Path); // if (! file.exists () &&! file.isdirectory ()) {file.mkdir (); } response.setContentType ( "application/vnd.ms-excel; charset = utf-8"); // // 파일의 저장 유형을 지정합니다. 응답 .SetchAracterEncoding ( "UTF-8"); ExportUtil.writer_log (요청, fname, 목록, 응답); // 로컬로 다운로드합니다Writer_Log 내보내기 방법은 다음과 같습니다
/*** 로컬 컴퓨터로 Excel 파일 생성 및 내보내기* @param fname 파일 이름* @param List 인쇄 할 데이터, 즉 데이터베이스 쿼리의 데이터 목록*/public static void writer_log (httpservletrequest 요청, 문자열 fname, 목록, httpservletresponse 응답) {outputstream os = response (response). 출력 스트림 응답 (); // 출력 스트림 지우기 // 다음은 중국 파일 이름 응답을 처리하는 시작입니다 .SetchAracterEncoding ( "UTF-8"); // 해당 콘텐츠의 인코딩 형식을 설정합니다. else fname = new String (fname.getBytes ( "utf-8"), "iso-8859-1"); response.setHeader ( "내용화", "첨부 파일; filename ="+fname+". xls"); response.setContentType ( "application/msexcel; charset = utf-8"); // 출력 유형 정의 // 중국어 파일 이름의 처리 끝 // 여기서 통합 문서 가져 오기 jxl.workbook; WritableWorkbook wbook = workbook.creatworkbook (OS); // Excel 파일 작성 writableSheet sheet = wbook.createsheet ( "System Log", 0); // 워크 시트 이름 CellView CellView = New CellView (); CellView.SetAutosize (True); // 자동 크기 시트를 설정합니다 .SetColumnView (0, 8); // 셀 너비를 설정하고, 0은 열 번호, 8은 너비 시트입니다 .SetColumnView (1, 20); // 셀 너비를 설정하고, 1은 열 번호, 20은 너비 시트입니다. 시트 .setColumnView (3, 20); 시트 .setColumnView (4, 30); 시트 .setColumnView (5, 13); 시트 .setColumnView (6, 15); 시트 .setColumnView (7, 32); 시트 .setColumnView (8, 15); // Excel 글꼴을 writablefont wfont = new WritableFont (writableFont.CreateFont ( "宋体"), 22, WritableFont.Bold, False, JXL.Format.underLinestyle.No_underLine, JXL.Format.colour.black); // 셀 글꼴 스타일 설정 writablecellformat titleformat = new WritableCellformat (wfont); // 셀 글꼴 추가 TitleFormat.SetAlignment (alignment.centre); // 텍스트 센터링 정렬 설정; 문자열 [] title = { "System Log"}; // (int i = 0; i <title.length; i ++)에 대한 Excel 테이블 헤더 시작을 설정합니다. {// 여기에서 가져 오는 것은 import jxl.write.label; 레이블 ExcelTitle = 새 레이블 (i, 0, title [i], titleformat); // 셀 컨텐츠 // 매개 변수 순서 : 시작 열, 시작 행, 끝 열, 끝 줄 시트 .mergecells (0, 0, 8, 0); // 위치, 어떤 행, 어떤 열 시트 .addcell (acceltitle); // 셀 정보 추가} // Excel 테이블 헤더 엔드 설정 // 첫 번째 행, 즉 디스플레이 시간, 매개 변수 : (열, 행, 내용) WritableFont wfonttime = new writableFont (writableFont.CreateFont ( "宋体"), 11, WritableFont.No_Bold, False, JXL.Format.NUNDENSTRYLE.NO_UNDERLENE, NO_UNDERLE, jxl.format.colour.black); // 셀 글꼴 스타일 설정 writeBlecellformat titletime = new WritableCellformat (wfonttime); // 셀 글꼴을 추가하여 titletime.setalignment (alignment.right); // 텍스트 센터링 정렬 설정; dateformat df = new simpledateformat ( "yyyy-mm-dd"); // sheet.setcolumnview (1, cellview); // 컨텐츠 레이블에 따라 열 너비를 자동으로 설정합니다. contentDate = 새 레이블 (0, 1, df.format (new date ()), titletime); // 셀 컨텐츠 // sheet.mergecells (16, 1, 18, 1); // 행과 열이 행 안에있는 위치, 즉 병합 위치입니다. 병합이 없으면 Sheet.AddCell (ContentDate)을 쓸 수 없습니다. // 셀 정보 추가 // 첫 번째 행의 끝 // 두 번째 행에는 조건 제목 표시 줄이 표시됩니다. WritableFont wfont2 = new WritableFont ( "宋体"), 11, writableFont.Bold, False, JXL.Format.UntrineStyle.NO_UNDERLINE, JXL.COLOR.BLACK); // 셀 글꼴 스타일 설정 writabeLecellformat TitleFormat2 = 새로운 writableCellformat (wfont2); // 셀 글꼴 추가 TitleFormat2.setBorder (Border.all, Borderlinestyle.thin); // 테두리-고체 선 설정; TitleFormat2.setAlignment (alignment.centre); // 텍스트의 중앙 정렬을 설정합니다. TitleFormat2.SetVerticalAlignment (verticalAlignment.centre); // 수직 센터링 설정; 레이블 content2a = 새 레이블 (0, 2, "일련 번호", titleformat2); // 셀 컨텐츠 -1st 그리드 레이블 content2b = 새 레이블 (1, 2, "사용자 이름", titleformat2); // 셀 컨텐츠 -2ND 그리드 레이블 content2c = 새 레이블 (2, 2, "레코드 시간", TitleFormat2); // 셀 컨텐츠 -3RD 그리드 레이블 content2c = 새 레이블 (2, 2, "레코드 시간", TitleFormat2); // 셀 컨텐츠 -3RD 그리드 레이블 content2c = 새 레이블 (2, 2, "레코드 시간", TitleFormat2); // 셀 컨텐츠 -3RD 그리드 레이블 content2d = 새 레이블 (3, 2, "조작 모듈", TitleFormat2); // 셀 컨텐츠 -4th 그리드 레이블 content2e = 새 레이블 (4, 2, "작동 내용", TitleFormat2); // 셀 컨텐츠 -5th 그리드 레이블 content2f = 새 레이블 (5, 2, "작동 조치", TitleFormat2); // 셀 컨텐츠 -6th 그리드 레이블 content2g = 새 레이블 (6, 2, "Operator IP", TitleFormat2); // 셀 컨텐츠 -7th 그리드 레이블 content2H = 새 레이블 (7, 2, "Operation Organization", TitleFormat2); // 셀 컨텐츠 -8th 그리드 레이블 content2i = 새 레이블 (8, 2, "note", titleformat2); // 셀 컨텐츠 -9th Grid Sheet.Mergecells (0, 1, 8, 1); /* 시트 .mergecells(0, 2, 0, 4); // 행과 열이 행 안에있는 위치, 즉 병합의 위치, 병합이 없으면 쓸 수 없습니다. (여기서는 출발 선 3에서 5 행, 열 1) 시트. Mergecells (1, 2, 1, 4); // 행과 열이 행 안에있는 위치, 즉 병합의 위치, 병합이 없으면 쓸 수 없습니다. (여기서 시작 선 3에서 5 행, 열 2) 시트. // 행과 열이 행 안에있는 위치, 즉 병합 된 위치, 병합이 없으면 쓸 수 없습니다. (여기서는 출발 선 3에서 행 5, 열 3)가 있습니다. 시트 .mergecells (3, 2, 3, 4); // 행과 열이 행 안에있는 위치, 즉 병합 된 위치, 병합이 없으면 쓸 수 없습니다. (여기서 시작 선 3에서 행 5, 열 4)는 다음과 같습니다. // 행과 열이 행 안에있는 위치, 즉 병합 된 위치, 병합이 없으면 쓸 수 없습니다. (여기서 시작 선 3에서 행 5, 열 5) 시트는 Mergecells (5, 2, 5, 4); // 행과 열이 행 안에있는 위치, 즉 병합 된 위치, 병합이 없으면 쓸 수 없습니다. (여기서 시작 선 3에서 행 5 열, 6 열이 있습니다) 시트 .mergecells (6, 2, 6, 4); // 행과 열이 행 안에있는 위치, 즉 병합 된 위치, 병합이 없으면 쓸 수 없습니다. (여기서는 출발 선 3에서 행 5, 열 7 열이 있습니다) 시트 .mergecells (7, 2, 7, 4); // 행과 열이 행 안에있는 위치, 즉 병합 된 위치, 병합이 없으면 쓸 수 없습니다. (여기서는 출발 선 3에서 행 5, 8 열이 있습니다) 시트 .mergecells (8, 2, 8, 4); // 행과 열이 행 안에있는 위치, 즉 병합의 위치. 병합이 없으면 쓸 수 없습니다. (여기서는 시작 선 3에서 행 5, 열 9가 있습니다) 시트 .mergecells (9, 2, 9, 4); // 행과 열이 행 안에있는 위치, 즉 병합의 위치. 병합이 없으면 쓸 수 없습니다. (여기에 출발 선 3에서 행 5, 열 10) 시트. // 행과 열이 행 안에있는 위치, 즉 병합의 위치. 병합이 없으면 쓸 수 없습니다. (여기에 출발 선 3에서 행 4, 열 11-13 열이 있습니다) 시트 .mergecells (13, 2, 15, 3); // 어디로와 열이 첫 번째 행에있는 위치, 즉 병합 된 위치, 병합이 없다면, 당신은 그것을 쓸 수 없습니다. (여기서 시작 선 3에서 4 행, 열 14-16 열이 있습니다) Sheet.Mergecells (16, 2, 16, 4); // 어디로와 열이 첫 번째 행에있는 위치, 즉 병합 된 위치, 병합이 없다면, 당신은 그것을 쓸 수 없습니다. (여기서는 시작 선 3에서 행 5, 열 17 열이 있습니다) 시트 .mergecells (17, 2, 17, 4); // 어디로와 열이 첫 번째 행에있는 위치, 즉 병합 된 위치, 병합이 없다면, 당신은 그것을 쓸 수 없습니다. (여기서는 시작 선 3에서 행 5, 열 18) 시트가 있습니다. // 위치, 열과 열이 첫 번째 행에있는 위치, 즉 병합 위치입니다. 병합이 없으면 쓸 수 없습니다. (다음은 시작 선 3 내지 5, 열 19) */ sheet.addcell (content2a); // 첫 번째 셀 정보 시트를 추가합니다 .addcell (content2b); // 두 번째 셀 정보 시트를 추가합니다 .addcell (content2c); // 세 번째 셀 정보 시트를 추가합니다 .addcell (content2d); // 네 번째 셀 정보 시트를 추가합니다 .addcell (content2e); // 다섯 번째 셀 정보 시트를 추가합니다 .addcell (content2f); // 여섯 번째 셀 정보 시트를 추가합니다 .addcell (content2g); // 일곱 번째 셀 정보 시트를 추가합니다 .addcell (content2h); // 8 번째 셀 정보 시트를 추가합니다 .addcell (content2i); // 9 번째 셀 정보 추가 writablefont wf = new writableFont (writableFont.createFont ( "安安"), 11, writableFont.No_Bold, False, JXL.Format.underLinestyle.No_underline, jxl.format.colour.black); // 셀 글꼴 스타일 설정 WriteBeLecellFormat wcf = new WritableCellFormat (WF); // 셀 글꼴 추가 wcf.setborder (Border.all, Borderlinestyle.thin); // 테두리를 설정--고시선; wcf.setverticalalignment (verticalalignment.centre); // 세로 정렬 설정 wcf.setalignment (alignment.centre); // 수평 센터링 텍스트 정렬; wcf.setwrap (true); // 자동 라인 랩 wrap wrap wf1 = new writableFont (writableFont.CreateFont ( "安体"), 11, writableFont.No_Bold, False, JXL.Format.underLinestyle.No_underline, jxl.format.colour.black); // 셀 글꼴 스타일 설정 WriteBlecellFormat wcf1 = 새로운 writablecellformat (wf1); // 셀 글꼴 추가 wcf1.setborder (Border.left, Borderlinestyle.thin); // 테두리-고체 선 설정; wcf1.setverticalalignment (verticalalignment.centre); // 세로 정렬 설정 wcf1.setalignment (alignment.centre); // 수평 센터링 텍스트 정렬; // 다음 루프 데이터베이스에 의해 얻은 정보 int c = 1; // 반복 반복에 사용되는 Excel의 줄 번호 IT = list.iterator (); while (it.hasnext ()) {logs tc = (logs) it.next (); dateformat dfmt = new simpledateformat ( "yyyy.mm"); 문자열 XH = String.Valueof (c); if (xh == null) {xh = ""; } label content0 = 새 레이블 (0, c+2, xh, wcf); // 일련 번호 문자열 이름 = tc.getUserName (); if (name == null) {name = ""; } label content1 = 새 레이블 (1, c+2, name, wcf); // 사용자 이름 문자열 xrpresent = tc.getLogtime (); if (xrpresent == null) {xrpresent = ""; } label content2 = 새 레이블 (2, c+2, xrpresent, wcf); // 레코드 시간 문자열 czmodel = tc.getModel (); if (czmodel == null) {czmodel = ""; } label content3 = 새 레이블 (3, c+2, czmodel, wcf); // 작동 모듈 문자열 sex = tc.getContent (); if (sex == null) {sex = ""; } label content4 = 새 레이블 (4, c+2, 섹스, wcf); // 작동 내용 문자열 생일 = tc.getOperate (); if (생일 == null) {생일 = ""; } label content5 = 새 레이블 (5, C+2, 생일, WCF); // 작동 액션 문자열 국가 = tc.getip (); if (Nation == NULL) {Nation = ""; } label content6 = 새 레이블 (6, C+2, 국가, WCF); // 연산자 IP String origin = tc.getorgname (); if (origin == null) {origin = ""; } label content7 = 새 레이블 (7, c+2, Origin, WCF); // 또는 조직 문자열 bplace = tc.getRemark (); if (bplace == null) {bplace = ""; } label content8 = 새 레이블 (8, c+2, bplace, wcf); // 비고 문자열 abc = ""; 레이블 내용 9 = 새 레이블 (9, C+2, ABC, WCF1); // 비고 시트 .SetRowView (C+2, 600); // 선 높이 시트를 설정합니다. 세트 로뷰 (C+2, 600); 시트 .setrowview (c+2, 600); 시트 .setrowview (c+2, 600); 시트 .setrowview (c+2, 600); 시트 .setrowview (c+2, 600); 시트 .setrowview (c+2, 600); 시트 .setrowview (c+2, 600); 시트 .setrowview (c+2, 600); sheet.mergecells (0, c+2, 0, c+2); // mergecells (1, c+2, 0, c+2); // mergecells (a, b, c, d) 셀 병합 함수 시트 .mergecells (2, c+2, 0, c+2); // 셀 열 번호 시트 .mergecells (3, c+2, 0, c+2); // b 세포주 번호 시트 Mergecells (4, c+2, 0, c+2); // c 셀에서 시작하여 [a, b]에서 c 컬럼 시트로 병합 .mergecells (5, c+2, 0, c+2); // 셀에서 D, DETHOL DOW DETH D SETHER.MERGECELLS (6, C+2, 0, C+2); Sheet.Mergecells (7, C+2, 0, C+2); Sheet.Mergecells (8, C+2, 0, C+2); Sheet.Mergecells (9, C+2, 0, C+2); 시트 .addcell (content0); 시트 .addcell (content1); 시트 .addcell (content2); 시트 .addcell (content3); 시트 .addcell (content4); 시트 .addcell (content5); 시트 .addcell (content6); 시트 .addcell (content7); 시트 .addcell (content8); 시트 .addcell (content9); C ++; } wbook.write (); // 파일에 wbook.close (); os.close (); } catch (예외 e) {새로운 paikeException ( "내보내기 파일 오류"); }}위의 예제 JXL 데이터 내보내기 데이터에 대한 설명은 내가 공유하는 모든 컨텐츠입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.