수입 때 java.io.IOException;
수입 java.io.OutputStream에;
수입 java.lang.reflect.Field의;
수입 java.lang.reflect.InvocationTargetException;
수입 java.lang.reflect.Method의;
수입 java.text.SimpleDateFormat에;
수입 java.util.Collection이;
수입 java.util.Date;
수입 java.util.Iterator를;
수입 java.util.regex.Matcher;
수입 있으며, java.util.regex.Pattern;
수입 javax.servlet.http.HttpSession;
수입 org.apache.poi.ss.usermodel.CellStyle;
수입 org.apache.poi.ss.usermodel.IndexedColors;
수입 org.apache.poi.xssf.usermodel.XSSFCell;
수입 org.apache.poi.xssf.usermodel.XSSFCellStyle;
수입 org.apache.poi.xssf.usermodel.XSSFClientAnchor;
수입 org.apache.poi.xssf.usermodel.XSSFDrawing;
수입 org.apache.poi.xssf.usermodel.XSSFFont;
수입 org.apache.poi.xssf.usermodel.XSSFRichTextString;
수입 org.apache.poi.xssf.usermodel.XSSFRow;
수입 org.apache.poi.xssf.usermodel.XSSFSheet;
수입 org.apache.poi.xssf.usermodel.XSSFWorkbook;
수입 com.cddgg.lianyoulw.utils.Arith;
/ **
* 엑셀 테이블
*
* @author의 wangbowen
*
파라미터 : <T> 일반 응용 프로그램, 자바 빈즈 스타일에 맞춰 모든 클래스의 대표
* /
공용 클래스 ExportExcel <T> {
/ **
* 엑셀
파라미터 : footTitle 발 제목
파라미터 : 셋 제어 데이터
* 출력 스트림을 @param
파라미터 : 세션 세션
* /
공공 무효 exportExcel {(문자열 footTitle, 컬렉션 <T> 데이터 세트, HttpSession이 세션 아웃의 OutputStream)
수출 (footTitle, 널 (null), 데이터 세트, 밖으로, "YYYY-MM-DD"세션);
}
/ **
* 엑셀
파라미터 : footTitle 발 제목
파라미터 : 헤더 헤더
파라미터 : 셋 제어 데이터
* 출력 스트림을 @param
파라미터 : 세션 세션
* /
공공 무효 exportExcel (문자열 footTitle 문자열 [] 헤더 콜렉션 <T> 데이터 세트
{)의 HttpSession 세션을 OutputStream에
수출 (footTitle, 헤더, 데이터 세트, 밖으로, "YYYY-MM-DD"세션);
}
/ **
* 엑셀
파라미터 : footTitle 발 제목
파라미터 : 헤더 헤더
파라미터 : 셋 제어 데이터
* 출력 스트림을 @param
파라미터 : 패턴 대조
파라미터 : 세션 세션
* /
공공 무효 exportExcel (문자열 footTitle 문자열 [] 헤더 콜렉션 <T> 데이터 세트
{) 문자열 패턴의 HttpSession 세션, 밖으로의 OutputStream
수출 (footTitle, 헤더, 데이터 세트, 밖으로, 패턴, 세션);
}
/ **
* 일반적인 방법은 JAVA의 반사를 이용하여, JAVA는 EXCEL 형태로 IO 장치에서 지정된 조건에 데이터 심볼들과 출력의 특정 세트에 배치 될 수있다
*
* @param 제목
* 표 제목
파라미터 : 헤더
* 표 속성 컬럼 이름 어레이
* @param 데이터 세트
* 데이터 컬렉션은 객체의 자바 빈즈 스타일의 클래스 라인에 배치해야합니다, 모음을 표시합니다. 지원이 방법
* 기본 데이터 타입 및 스트링 일 바이트 [] (화상 데이터)의 데이터 유형 자바빈 특성
* 밖으로 @param
출력 장치와 관련된 * 스트림 객체는 로컬 파일이나 네트워크에 수출 문서를 엑셀 수 있습니다
* @param 패턴
* 출력 형식을 설정 시간 데이터가있는 경우. 기본값은 "YYY-MM-DD"입니다
파라미터 : 세션 세션
* /
공공 무효 수출 (문자열 제목, 문자열 [] 헤더,
컬렉션 <T> 데이터 집합의 OutputStream 아웃, 문자열 패턴의 HttpSession 세션) {
통합 문서를 선언 //
XSSFWorkbook 책 = 새 XSSFWorkbook ();
테이블을 만들기 //
XSSFSheet 시트 book.createSheet = ();
// 테이블의 설정 기본 열 폭은 30 바이트입니다
sheet.setDefaultColumnWidth (25);
// 최상위 관리자의 도면을 선언
XSSFDrawing 족장 sheet.createDrawingPatriarch = ();
book.setSheetName (0, 제목); // 첫 번째 시트의 이름을 설정합니다
XSSFRow 행 sheet.createRow = () (단 0);
XSSFFont 폰트 book.createFont = ();
// font.setBoldweight (XSSFFont.BOLDWEIGHT_BOLD);
font.setFontHeightInPoints은 ((짧은) 9); // 폰트 크기를 설정할
font.setFontName ( "마이크로 소프트 우아한 검은");
XSSFCellStyle 스타일 = book.createCellStyle ();
style.setAlignment (XSSFCellStyle.ALIGN_CENTER); // 정렬
style.setFont (폰트);
style.setBorderTop (XSSFCellStyle.BORDER_THIN);
style.setBorderBottom (XSSFCellStyle.BORDER_THIN);
style.setBorderLeft (XSSFCellStyle.BORDER_THIN);
style.setBorderRight (XSSFCellStyle.BORDER_THIN);
style.setFillForegroundColor (IndexedColors.PALE_BLUE.getIndex ());
style.setFillPattern (CellStyle.SOLID_FOREGROUND);
XSSFCellStyle style2 = book.createCellStyle ();
style2.setAlignment (XSSFCellStyle.ALIGN_CENTER); // 정렬
style2.setBorderTop (XSSFCellStyle.BORDER_THIN);
style2.setBorderBottom (XSSFCellStyle.BORDER_THIN);
style2.setBorderLeft (XSSFCellStyle.BORDER_THIN);
style2.setBorderRight (XSSFCellStyle.BORDER_THIN);
style2.setFont (폰트);
대 (단 I = 0; I는 <headers.length; 내가 ++) {
XSSFCell 셀 row.createCell = (I);
cell.setCellStyle (스타일);
XSSFRichTextString 텍스트 = 새로운 XSSFRichTextString (헤더 [I]);
cell.setCellValue (텍스트);
}
// 루프 데이터
반복자 <T는>는 dataset.iterator을 () =;
INT 인덱스 = 0;
반면 (it.hasNext ()) {
인덱스 ++;
행 = sheet.createRow (인덱스);
T를 t = (T) it.next ();
// 반사되어, 주문 자바빈 특성에 따라, 동적 호출하는 getXXX () 속성 값을 획득하는 방법
필드 [] 필드 = t.getClass () getDeclaredFields ().;
대해 INT (I = 0; I <fields.length은, 내가 ++) {
XSSFCell 셀 row.createCell = (I);
cell.setCellStyle (style2);
필드 필드는 필드 = [I];
문자열은 fieldName = field.getName ();
// fieldName에이 idCard 경우 입력 한 경우
경우 (fieldName.equals ( "idCard")) {
fieldName에 = fieldName.equals ( "idCard") "IDCard": fieldName에;
}
문자열 GetMethodName와 = "GET"
fieldName.substring + (0, 1) .toUpperCase ()
+ fieldName.substring (1);
{시도
클래스 <? 개체> tCls t.getClass = ()으로 연장;
방법 getMethod 메소드 = tCls.getMethod (GetMethodName와,
새로운 클래스 [] {});
개체 값 = getMethod.invoke (t, 새로운 객체 [] {});
주조 유형 결정 값 후 //
문자열 textValue = NULL;
만약 (instanceof는 부울 값) {
부울 bValue = (부울) 값;
textValue은 = "男";
만약 (! bValue) {
textValue은 = "女";
}
} 다른 경우 (값 instanceof를 날짜) {
날짜 = 일자 (일) 값;
SDF = SimpleDateFormat의 새로운 SimpleDateFormat의 (패턴);
textValue = sdf.format (일자);
} 다른 경우 (더블 instanceof를 값) {
이중 VALUE1 = 사용해 Double.parseDouble (value.toString ());
textValue Arith.doubleTransform = (값);
} 다른 경우 (값 instanceof를 바이트 []) {
사진을 //하면, 60 픽셀로 행 높이를 설정;
row.setHeightInPoints (60);
열 폭은 80 픽셀이고 그림을 설정 여기서 변환 부에주의 //
sheet.setColumnWidth (I, (짧은) (35.7 * 80));
바이트 [] bsValue = (바이트 [])의 값;
XSSFClientAnchor 앵커 새로운 XSSFClientAnchor = (0, 0,
1,023, 255, (짧은) 6 인덱스 (짧은) 6, 인덱스);
anchor.setAnchorType (2);
patriarch.createPicture (앵커, book.addPicture (
bsValue, XSSFWorkbook.PICTURE_TYPE_JPEG));
} 다른 {
// 값이 비어 있는지 여부를 확인
경우 (값! = NULL) {
// 다른 데이터 타입은 단순 스트링으로 취급
textValue = value.toString ();
}
}
// 정규 표현식의 사용에없는 사진 데이터는 textValue이 자리 전적으로 구성 여부를 확인하는 경우
경우 (textValue! = NULL) {
패턴 p =는 Pattern.compile ( "^ // 차원 + (D + //.//) $?");
일치 일치 = p.matcher (텍스트, 값);
경우 (matcher.matches ()) {
// 디지털 처리와 이중
cell.setCellValue (사용해 Double.parseDouble (textValue));
} 다른 {
XSSFRichTextString richString = 새로운 XSSFRichTextString (
textValue);
richString.applyFont (폰트);
cell.setCellValue (richString);
}
}
} 캐치 (SecurityException가 전자) {
e.printStackTrace ();
} 캐치 (NoSuchMethodException와 전자) {
e.printStackTrace ();
} 캐치 (IllegalArgumentException가 전자) {
e.printStackTrace ();
} 캐치 (시 IllegalAccessException 전자) {
e.printStackTrace ();
} 캐치 (있는 InvocationTargetException 전자) {
e.printStackTrace ();
} 마지막으로 {
자원을 정리 //
}
}
}
{시도
book.write (아웃);
out.flush ();
out.close ();
} 캐치 (IOException이 전자) {
e.printStackTrace ();
}
}
}
사용 방법 :
ExportExcel <ContractVO> = 전 새로운 ExportExcel <ContractVO> ();
// 세트리스트 이름
문자열 [] 헤더 = { "수", "직원 이름", "성", "계약의 유형", "××× 번호", "파견"
"파견 시간", "계약 시작 시간", "계약 기간의 종료", "계약 기간", "상태 계약", "계약 이름"};
// 수출 목록 이름의 값을 쿼리
목록 <ContractVO> 집합 contractExpireDmn.getContractMessage = ();
response.reset ();
// 생성 된 파일 형식을 설정
response.setContentType ( "애플리케이션 / vnd.ms 엑셀");
// 설정 헤더
response.setHeader ( "내용 - 처리", "첨부 파일, 파일 이름 ="+ 새로운 String (( "단위 계약 조기 경보 정보") .getBytes ( "GBK"), "ISO8859-1")
+ ".XLSX");
OS의 OutputStream response.getOutputStream = ();
// 내부 엑셀 방법에 들어오는 데이터 내보내기
ex.exportExcel ( "유닛 직원 계약 엑셀 문서", 헤더, 데이터 세트, 운영 체제, 세션);