Excel 및 일반적인 방법을 사용하는 방법을 내보낼 자바 반사 메커니즘을 사용하여

수입 때 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 ( "유닛 직원 계약 엑셀 문서", 헤더, 데이터 세트, 운영 체제, 세션);


추천

출처blog.51cto.com/14028890/2415255