일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- ptree
- KARMOR
- 클리닝스틱 구매
- 레이싱시트
- java
- 정적분석
- Radler
- 클리닝스틱
- playseat challenge
- 아이코스 청소
- TMRecovery
- 플레이시트 챌린지
- 조용한 게스트하우스
- pfiles
- SonarScanner
- 103LAB
- 소나큐브
- sqlite-jdbc
- DB계정락
- 동해
- 경포가시연습지
- 설치
- Oracle
- 아이코스 클리닝스틱
- 가상 광 디스크
- 클리닝스틱 가격
- 동해 게스트하우스
- 소스코드 정적분석
- 뮌헨 맛집
- 소나스캐너
- Today
- Total
티끌모아부자
[EXCEL] 엑셀 다운로드 기능 구현 방법 비교 본문
화면에서 엑셀을 다운로드하는 페이지를 만들려고 하다보니 여러가지 방법이 있어서 시도해본 경험을 정리해보자
요구사항
1. DB에서 데이터를 뽑아와야함.
2. chrome, ie 둘다 지원해야함.
3. 브라우저가 멈추면 안됨.
방법
1. 페이지에 iframe 생성 후 사용자눈에는 보이지 않게 처리, excel에서 html 태그를 읽어서 처리할 수 있으므로 html를 iframe에 write 후 focus() 메소드로 다운로드 할 수 있도록 처리
장점 : 특별한 poi 모듈이 필요하지 않음. js 파일로 간단하게 처리가능
단점 : 1. 파일 오픈 시 에러 메시지 출력
" 열려는 파일 'filename.xls'의 형식이 파일 확장명에서 지정한 형식과 다릅니다. 파일을 열기 전에 파일이 손상되지 않았는지,
원본을 신뢰할 수 있는지 확인하십시오. 지금 파일을 여시겠습니까? "
파일을 열게 되면 위와 같은 내용이 뜨게 된다. 보기에 안좋아서...
2. 크롬안됨.
focus()라는 함수가 결과적으로 excel 다운로드를 유발하는 역할을 하는데, 크롬에서는 해당 함수를 인식하지 못한다.
크롬을 쓰는 사람이 워낙 많기 때문에 이 부분은 조금 문제가 될 듯 함.
3. 브라우져 멈춤
엑셀표 형태로 html태그를 하나하나 다 작성해서 프레임에 들고 있어서 그런지 데이터가 많은 경우에 브라우져가 멈춰버리는 경우가 있었음.
4. html 태그 만들기 귀찮음.
html태그로 표를 만들어야하니 엄청나게 귀찮음...
2. 화면에 표시되는 document에 innerHTML을 통해서 <body> 태그 하위에 작성한 테이블 태그를 <a> 로 추가하여 다운로드하도록 구현
var exceltag = <tr><td>1</td></tr>
document.body.innerHTML+="<a id='id1' downloads='파일명' style='display:none' href='data:text;charset=utf-8,"+ encodeURIComponent(exceltag)+"'>down</a>
document.getElementById('id1').click();
장점 : 1. 간편해서 가볍게 쓰기에 좋음.
2. IE나 크롬둘다 잘 되서 조금이나마 범용적.
단점 : 1. 생성한 <a>태그 삭제안하면 보이지는 않지만 계속 쌓이니까 tag삭제 해주어야함.
2. 데이터양이 많을 경우 동일하게 브라우저가 멈춰버림
=> 브라우저가 멈추는 것은 문제가 있으므로 제외
3. excel을 만들어줄 별도 페이지 코딩( poi모듈, jsp 사용 )
장점 : 1. 데이터양에 구애받지 않음. 시간이 조금 더 걸릴 뿐 데이터양이 많더라도 정상적으로 다운 받아짐
2. 파일을 열때 형식이 다르다며 확인하라는 메시지가 뜨지 않음.
3. poi 모듈을 사용해서 하기 때문에 스타일 지정이나 코딩이 한결 수월함.
단점 : 1. 구현하는 것은 1,2번보다 귀찮았음.(데이터를 가져올 http 통신 및 파싱 프로그램 작성해야 했음)
=> 여러가지 부분에서 3번이 가장 편해서 3번을 사용하였음.
'IT-JAVA > JAVA' 카테고리의 다른 글
[sqlite] sqlite-jdbc 샘플 코드 (0) | 2018.05.05 |
---|---|
[java] try-catch에서 exception과 throwable (1) | 2017.07.18 |
[java] XML Document Parsing(수신) (0) | 2017.03.21 |
[java] Properties 설정파일 사용하기 (0) | 2017.03.21 |
[java] BigDecimal 연산과 비교 (0) | 2017.03.21 |