메뉴 건너뛰기

홈피디자인닷컴

2007.02.22 15:39

엑셀 다운로드 관련

(*.138.65.73) 조회 수 53106 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print 수정 삭제
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print 수정 삭제
http://cafe.naver.com/q69/81510

현재 마무리 중인 프로젝트에서 웹에서 엑셀Excel 파일로 내보내기Export를 할때 문제가 있으니 수정을 바란다는 고객의 요청이 있었다.


원래 엑셀을 내려줄 때 사용하던 헤더 설정 부분은 다음과 같았다.


response.setHeader("Content-type", "application/vnd.ms-excel;charset=euc-kr");
response.setHeader("Content-Disposition", "inline; filename="Test.xls"");

위와 같은 방식일 경우 엑셀이 브라우저로 바로 열리게 된다. 간편하게 내용을 확인하기에는 편하겠지만, 엑셀로 내보내는 대부분의 목적이 보고서 자료로 참고하거나 다른 사람에게 검토용으로 건네기 위한 경우가 많으리라 생각된다. 브라우저로 열릴 경우 메뉴나 툴바 등의 인터페이스UI가 IE와 범벅이 되면서 엑셀의 모든 기능을 사용하기가 난감하다.


초기에 고객에게 공지한 사항 중의 하나가 엑셀을 브라우저 창이 아닌 엑셀 프로그램 창에서 띄우는 방법이었다.



인터넷 브라우저에서 오피스 프로그램을 응용 프로그램 창으로 띄우는 방법



  1. 탐색기를 실행한다.
  2. 도구 메뉴에서 폴더 옵션을 선택한다.
  3. 폴더 옵션 창에서 파일 형식 탭을 선택한다.
  4. 변경할 파일 형식(XLS, PPT, DOC 등)을 선택한 후에 고급 버튼을 누른다.
  5. 아래쪽에서 같은 창에서 열기 옵션을 해제한다.

참고 : How to launch Word from Internet Explorer


위 방법으로 해결되는듯 하였으나, 언제나 그럿듯이 문제가 발생하였다. 위 설정을 적용한 후에 재부팅을 하면 설정 내용이 초기화 되는 현상이었다. 거기에다가 웹 페이지에서 엑셀 파일 다운로드를 선택했을때 저장할 것인지 열것이지를 물어보는 대화상자를 표시하지 않도록 설정한 것이다.


결국은 서버쪽에서 해결 방법을 찾기로 하였다.


HTTP 응답 헤더중에서 Content-Type을 [application/octet-stream] 으로 변경하고, Content-Disposition도 [inline]에서 [attachement]로 변경하여 강제적으로 다운로드 확인 대화상자가 뜨도록 하는데까지 일단 진행…


다음 문제는 대화상자에서 열기를 선택했을 때 엑셀에서 IE의 캐싱 오동작으로 인해 파일을 못찾는 문제였다.



C:Documents and Setting…Temporary Internet Files…Test[1].xls을 찾을 수 없습니다. 파일이름의 철자와 파일위치가 정확한지 확인합니다.


[파일]메뉴에서 최근에 사용한 파일목록 중에서 파일을 열려고 했으면 파일 이름이 변경되거나 이동, 삭제되지 않았는지 먼저 확인하십시오.


이런 망할 M$… [inline]을 쓰자니 다운로드 확인 대화상자가 안뜨고 [attachement]를 쓰자니 엑셀에서 열지를 못하고… 반나절 이상은 고민한것 같다.


결국 방법은 있는 법! 위와 같은 오류 때문에 흰머리가 생겼을 개발자들을 위해서 해결 방안을 공개한다. HTTP 응답 헤더를 잘 설정하면 된다. 아래 코드를 보자. Cache-Control 부분이 포인트다. 코드에 대한 비난은 사절… 일단 원하는 대로 동작하기만 하면 코드는 관심 밖이다. (JExcel을 사용했기 때문에 Content-Lenght 부분은 정확한 크기를 예측할 수 없어서 설정하지 않았음)


if (agent.indexOf("MSIE 6.0") > -1 || agent.indexOf("MSIE 5.5") > -1) {
  response.setHeader("Content-type", "application/octet-stream");
  response.setHeader("Content-Disposition", "attachment; filename="Test.xls"");
  response.setHeader("Content-Transfer-Encoding", "binary");
  response.setHeader("Pragma", "no-cache");
  response.setHeader("Cache-Control", "private");
  response.setHeader("Expires", "0");
} else {
  response.setHeader("Content-type", "file/unknown");
  response.setHeader("Content-Disposition", "attachment; filename="Test.xls"");
  response.setHeader("Content-Description", "Servlet Generated Data");
  response.setHeader("Pragma", "no-cache");
  response.setHeader("Cache-Control", "private");
  response.setHeader("Expires", "0");
}


List of Articles
번호 제목 글쓴이 날짜 조회 수
258 ASP+SQL 연동문제.. 해결방법 1 강꾼 2011.05.26 25471
257 블로그 XML RSS 구현 (ASP) 플래셔 2007.04.25 46197
256 블로그 트랙백의 구현 (ASP) 플래셔 2007.04.25 44339
» 엑셀 다운로드 관련 플래셔 2007.02.22 53106
254 UTF-8인코딩 및 디코딩 관련 함수 1 신세계 2007.01.04 54762
253 에디트 플러스 주석달기 플래셔 2007.01.03 46426
252 쿼리분석기에서 주석달고 해제 플래셔 2007.01.03 39837
251 프레임에서 새로고침(F5)를 하더라도 첫 페이지로 이동하지 않습니다. 플래셔 2007.01.03 45452
250 [본문스크랩] 파일다운로드(새창안열리고 강제로) 손님 2007.01.03 52273
249 ASP 응용 프로그램의 문자열 처리 성능 향상 플래셔 2007.01.02 36828
248 MSSQL 데이터 형식 플래셔 2007.01.02 45643
247 [본문스크랩] DLL 등록 쉽게 하기 손님 2006.12.11 46570
246 ASP웹에서 바로 CSV로 저장 플래셔 2006.11.28 44483
245 파일 다운로드 프로그램 작성시 한글파일명이 깨지는 것에 대해서 플래셔 2006.11.28 54323
244 ASP에서 excel로 저장하기 플래셔 2006.11.24 51381
243 xmldom 을 이용한 xml과 xsl 활용 예제 플래셔 2006.11.22 43567
242 원격 파일 가져오기 (자바스크립트 속이기) 플래셔 2006.11.22 44032
241 DataBase 연결하기 ODBC연결하기... 손님 2006.10.02 40947
240 ODBC설정하기(MS ACCESS)...DataBase 연결하기 손님 2006.10.02 43029
239 DataBase 연결하기.... ODBC설정하기(MS ACCESS) 손님 2006.10.02 41030
Board Pagination ‹ Prev 1 2 3 4 5 6 7 8 9 10 ... 13 Next ›
/ 13

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소

Designed by sketchbooks.co.kr / sketchbook5 board skin

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5