한국어

네트워킹

온누리070 플레이스토어 다운로드
    acrobits softphone
     온누리 070 카카오 프러스 친구추가온누리 070 카카오 프러스 친구추가친추
     카카오톡 채팅 상담 카카오톡 채팅 상담카톡
    
     라인상담
     라인으로 공유

     페북공유
    
     PAYPAL
     
     PRICE
     

pixel.gif

    before pay call 0088 from app


조회 수 :
75195
등록일 :
2011.12.19
22:18:15 (*.160.42.233)
엮인글 :
http://webs.co.kr/index.php?document_srl=448&act=trackback&key=f87
게시글 주소 :
http://webs.co.kr/index.php?document_srl=448
List of Articles
[펌] Java && Excel 연동 JAVA  

http://blog.naver.com/hearer2000/120013585543


http://blog.naver.com/sentosa98/140012963929
참조 : www.javapattern.info

         www.okjsp.pe.kr


자바로 엑셀을 핸들링 할 수 있는 방법은 크게 두가지로 나누어 진다.
1. Java Excel API    
    참조 : http://jexcelapi.sourceforge.net/
2. POI
    참조 : http://jakarta.apache.org/poi/index.html



    흔히 POI를 엑셀을 핸들링 하기 위한 것으로만 오해하기 쉬운데,
    POI 프로젝트는 마이크로소프트 OLE 2 복합도큐먼트포맷형식의 파일을 순수 자바를 이용하여 핸들링하는 APIs로 구성되어있다.
    OLE 2 복합도큐먼트포맷형식의 파일은 마이크로소프트 엑셀 혹은 워드파일 등의 대부분의 오피스파일들을 나타낸다.



일반적으로 엑셀에 대한 핸들링만을 수행할 때에는 Jxl을 권장한다.
엑셀을 핸들링 할 때 엑셀에서 가장 작은 단위는 알고 있듯이 "셀"이다.
모든 작업은 이 셀을 중심으로 이루어진다.



주의할 점)
1) 엑셀 쉬트상에 "C15"라는 셀에 데이터가 있다고 가정하자.( 15행 C열을 나타낸다.)
이 때 Jxl에서는  A1( 1행 A열)부터  C15까지는 실제 데이터가 없을 경우에라도 null이 아닌 빈데이터가 있다고 인식한다.
즉 D열 이상이나, 16행 이상을 접근 할 때에 null로 인식한다.

하지만 POI에서는 C15 이내에 있다 하더라도 실제 데이터가 없을 때에는 null로 인식한다.

2) Jxl에서는 각 셀의 데이터 타입을 실제 엑셀 파일에서 지정된 셀의 타입을 따르고,
   POI에서는 셀의 실제 데이터 형을 따른다.
   예를 들어 특정 셀의 타입을 text 로 잡아놓고, 데이터를 1234로 입력하면
   Jxl에서는 "12345"로 인식하고, POI에서는 12345.00 이런식으로 인식한다.



EX ) Java Excel API를 이용한 Excel 읽기

import jxl.*;

// .. 중간생략

    Workbook workbook = null;
    Sheet sheet = null;
    Cell cell = null;

    try
    {
        //엑셀파일을 인식
        workbook = Workbook.getWorkbook( new File( szFileName));

        //엑셀파일에 포함된 sheet의 배열을 리턴한다.
        //workbook.getSheets();

        if( workbook != null)
        {
            //엑셀파일에서 첫번째 Sheet를 인식
            sheet = workbook.getSheet(0);

            if( sheet != null)
            {
                //셀인식 Cell a1 = sheet.getCell( 컬럼 Index, 열 Index);
                //셀 내용 String stringa1 = a1.getContents();

                //기록물철의 경우 실제 데이터가 시작되는 Row지정
                int nRowStartIndex = 5;
                //기록물철의 경우 실제 데이터가 끝 Row지정
                int nRowEndIndex   = sheet.getColumn( 2).length - 1;

                //기록물철의 경우 실제 데이터가 시작되는 Column지정
                int nColumnStartIndex = 2;
                //기록물철의 경우 실제 데이터가 끝나는 Column지정
                int nColumnEndIndex = sheet.getRow( 2).length - 1;

                String szValue = "";

                for( int nRow = nRowStartIndex; nRow <= nRowEndIndex; nRow++ )
                {
                    for( int nColumn = nColumnStartIndex; nColumn <= nColumnEndIndex ; nColumn++)
                    {
                        szValue = sheet.getCell( nColumn, nRow).getContents();

                        System.out.print( szValue);
                        System.out.print( "\t" );
                    }
                    System.out.println();
                }
            }
            else
            {
                System.out.println( "Sheet is null!!" );
            }
        }
        else
        {
            System.out.println( "WorkBook is null!!" );
        }
    }
    catch( Exception e)
    {
        e.printStackTrace();
    }
    finally
    {
        if( workbook != null)
        {
            workbook.close();
        }
    }

EX ) POI를 이용한 Excel 파일 읽기

import org.apache.poi.hssf.usermodel.*;

// .. 중간 생략

    HSSFWorkbook workbook = null;
    HSSFSheet sheet = null;
    HSSFRow row = null;
    HSSFCell cell = null;

    try
    {
        workbook = new HSSFWorkbook( new FileInputStream( new File( szFileName)));

        if( workbook != null)
        {
            sheet = workbook.getSheetAt( 0);

            if( sheet != null)
            {

                //기록물철의 경우 실제 데이터가 시작되는 Row지정
                int nRowStartIndex = 5;
                //기록물철의 경우 실제 데이터가 끝 Row지정
                int nRowEndIndex   = sheet.getLastRowNum();

                //기록물철의 경우 실제 데이터가 시작되는 Column지정
                int nColumnStartIndex = 2;
                //기록물철의 경우 실제 데이터가 끝나는 Column지정
                int nColumnEndIndex = sheet.getRow( 2).getLastCellNum();

                String szValue = "";

                for( int i = nRowStartIndex; i <= nRowEndIndex ; i++)
                {
                    row  = sheet.getRow( i);

                    for( int nColumn = nColumnStartIndex; nColumn <= nColumnEndIndex ; nColumn++)
                    {
                        cell = row.getCell(( short ) nColumn);
                        
                        if( cell == null)
                        {
                            continue;
                        }
                        if( cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC)
                        {
                            szValue = String.valueOf( cell.getNumericCellValue());
                        }
                        else
                        {
                            szValue = cell.getStringCellValue();
                        }

                        System.out.print( szValue);
                        System.out.print( "\t" );
                    }
                    System.out.println();
                }
            }
            else
            {
                System.out.println( "Sheet is null!!" );
            }
        }
        else
        {
            System.out.println( "WorkBook is null!!" );
        }

    }catch(Exception e){
        e.printStackTrace();
    }


EX ) Jxl을 이용하여 Excel에 데이터 저장하기

import jxl.*;

// .. 중간생략

    WritableWorkbook workbook = null;
WritableSheet sheet = null;

File excelFile = new File( szFileName);
Label label = null;

long start = 0;
   long end = 0;
  
    try
    {
        for(int i = 0 ; i < 10; i++)
        {
            workbook = Workbook.createWorkbook( excelFile);
            workbook.createSheet("sheet1", 0);
            sheet = workbook.getSheet(0);
            for( int j = 0; j < 10000; j++){
                label = new Label( j, 0, "test cell");
                sheet.addCell( label);
            }

            kidsbook.write();
            kidsbook.close();
        }
    }
    catch( Exception e)
    {
    }

// .. 중간생략


EX ) POI를 이용한 브라우저에서 Excel에 데이터 저장하여 보여주기

import org.apache.poi.hssf.usermodel.*;

// ... 생략

public void writeStream( PTSEvaluation[] arrPTSEvaluation) throws Exception
{
    try
    {

        HSSFWorkbook wb = new HSSFWorkbook();
        HSSFSheet sheet = wb.createSheet( "new sheet");
        HSSFRow row = null;
        HSSFCell cell = null;
        HSSFCellStyle style = null;

        ServletOutputStream excelOut = ServiceContext.getResponse().getOutputStream();
        ServiceContext.getResponse().setHeader( "Content-Disposition", "attachment;filename=EvaluationCompensationList.xls");
        ServiceContext.getResponse().setContentType( MimeType.getMimeType( "xls"));

        //로우 생성
        row = sheet.createRow( ( short)0);
        row.setHeightInPoints( 30);

        //셀에 적용한 스타일을 생성한다.
        style = PTSUtil.setExcelHeaderStyle( wb);

        // 셀 생성
        cell = row.createCell( (short)0);

        //한글 처리
        cell.setEncoding( HSSFCell.ENCODING_UTF_16);  

        //셀에 데이터 입력하기
        cell.setCellValue( "값");

        //셀에 스타일 적용하기
        cell.setCellStyle(style);

        //.. 중간생략 ( 이런 방식으로 로우와 셀을 증가 시키면서 작업을 수행하면 된다.

        wb.write( excelOut);
        excelOut.flush();
    }
    catch( Exception e)
    {
        e.printStackTrace();
        throw e;
    }
    finally
    {
        ServiceContext.getResponse().getOutputStream().close();
    }
}

// ... 생략
[출처] [펌] Java && Excel 연동|작성자 강군


번호 제목 글쓴이 날짜 조회 수
58 oracle download install 오라클 다운로드 설치 admin 2018-05-29 1695
57 숫자 날짜 문자열 문자 공간 JSON MySQL 자료형 총 정리 phpMyAdmin 자료형 admin 2018-03-26 2028
56 mysql procedure admin 2017-11-16 3170
55 Sqlite very detail easy tutorial I recommand this admin 2017-09-09 4142
54 mysql 로컬접속 풀고 특정 아이피 접속 허가 허락 가능 하게 설정 하는 방법 admin 2017-09-05 3913
53 linux command chmod 리눅스 명령어 가장 쉽게 이해하기 설명 사용자 구룹 타인 권한 admin 2017-09-05 4096
52 mariadb CREATE USER CREATE USER statement creates new MariaDB accounts. admin 2017-09-01 8703
51 MySQL 데이터 베이스 백업 및 복구 방법 admin 2017-09-01 4093
50 Allowing MySQL Root Login from All IP Addresses : admin 2017-08-17 3503
49 Installation of MySQL Database Server admin 2017-08-17 3565
48 mysql 쿼리 로그 남기기 (실시간) admin 2015-04-15 6577
47 SQL Delete records using subqueries admin 2015-04-03 6073
46 Mysql privilege table GRANT SELECT,INSERT,UPDATE,DELETE ON db.table admin 2015-04-02 6352
45 안드로이드 SQLite 속도 향상! insert Transaction admin 2014-04-07 18264
44 MySQL에 원격 접속 허용 여러가지 아이피 아이피대역으로 admin 2014-04-02 24195
43 10gR2_sles10_install file admin 2014-03-18 11713
42 this is final answer assets sqlite Databases trouble copy External DB, check eclips admin 2014-02-18 12559
41 Browse SQLite data on the Android emulator admin 2014-02-15 14028
40 SQLite Database Browser file admin 2014-02-14 12699
39 SQLite Databases using External DB admin 2014-02-14 16921
38 sqlite DB copy admin 2014-02-14 12498
37 Android SQLite Database with Multiple Tables admin 2014-02-13 11338
36 Android Simple Clean Good SQLite Database Tutorial 잘된 설명 admin 2014-02-13 12103
35 android sqlite 사용하기 admin 2014-02-10 22108
34 SQLite 개발가이드 데이터베이스의 성능 admin 2014-02-10 25237
33 android - 다수의 Insert 수행시 속도 향상을 위한 팁 sQlite admin 2014-02-10 18392
32 Oracle Linux 에 Oracle DB 설치하기 admin 2013-12-03 25292
31 PreparedStatement mysql java 깔끔한설명 admin 2013-10-26 27758
30 Connect Excel VBA to a MySQL database file admin 2013-09-05 15563
29 Configuring Oracle ASM disks in Oracle Enterprise Linux admin 2013-04-20 13797
28 OS에따른 Oracle 설치버전 admin 2013-04-08 14980
27 RHEL4 + 10g 설치 _silent mode admin 2013-04-08 19407
26 OLE5 + 11G 설치 _silent mode admin 2013-04-08 22857
25 WHERE 조건절 검색시 서브쿼리는 어떻게? admin 2013-04-01 14358
24 CDR 추출 저장 Inner Join 사용 Sql 문 admin 2013-02-05 15086
23 SUPER OCM 1.8club admin 2012-12-18 14520
22 MySQL Java tutorial admin 2012-09-30 21703
21 Oracle 10g Articles admin 2012-06-24 15781
20 기본 10g 설치의 리눅스 세팅에서 추가 해줘야하는 사항(윈도우) admin 2012-06-24 17088
19 SUSE Linux Enterprise Server 10 (Oracle 10g R2 (10.2.0.1)) file admin 2012-03-09 16736
18 Upgrade Oracle from 10.2.0.1 To 10.2.0.4 (Windows) admin 2012-03-06 32597
17 Upgrade Oracle 10g Release 2 from 10201 to 10204 admin 2012-03-05 35899
16 centos 6.2 oracle 10g 설치 admin 2012-03-05 38786
15 Oracle RHEL4+10G 10.2.0.1 설치 10.2.0.5 패치 admin 2012-03-03 26615
14 Oracle Backup & restore with RMAN 기본 admin 2012-02-12 16324
13 오라클 ACE가 해설하는 Oracle Backup & Recovery admin 2012-02-07 16262
12 Oracle Backup & Restore admin 2012-02-07 25678
11 http://www.hoons.kr/ admin 2011-12-19 16038
» Java && Excel 연동 JAVA 자바로 엑셀을 핸들링 할 수 있는 방법 admin 2011-12-19 75195
9 (C#) ASP.NET MySQL Check Already Exists Add/Insert Record 프로그래밍 코드 admin 2011-12-19 16487