ASP를 이용해 HTML 데이터를 엑셀로 전달하기

일반입력 :2000/01/06 00:00

Susie Adams

http://www.zdnet.com/devhead/stories/artASP 페이지를 만드는 방법을 배워보고 이를 이용해 HTML 데이터 스트림을 엑셀 스프레드시트로 전달한 후 IE 브라우저에서 HTML을 엑셀 워크북(workook) 형태로 출력하는 방법을 알아보자. 액티브 서버 페이지(Active Server Page)를 이용하면 여러가지 방법으로 엑셀 워크시트를 만들어 낼 수 있다. 서버측의 엑셀 8.0 VBA 컴포넌트를 이용해도 스프레드시트를 만들어 낼 수 있다. 하지만 서버측에서 기대한 만큼의 네트워크 트래픽이나 작업 부하를 처리하지 못하거나 클라이언트측에서 처리의 일부분을 담담해야 할 필요가 있는 경우라면 어떻게 해야 할까? 여기에서 우리는 클라이언트측 처리 부분에 대해 집중적으로 설명할 것이다.엑셀 97에는 HTML 스트림을 워크시트로 해석해 주는 특별한 기능이 포함되어 있다. 물론 이 기능은 엑셀 97이나 그 상위 버전에서만 사용할 수 있다는 제약이 있기는 하지만 엑셀 스프레드시트와 유사한 데이터 스트림을 직접 만들어야 하는 것에 비하면 분명히 효율적인 방법이다.그렇다면 이런 방법을 사용할 때 브라우저는 어떤 역할을 하게 될까? 인터넷 익스플로러(IE) 3.0 이상 버전에서는 마이크로소프트사의 엑셀이 설치되어 있는 시스템에서 엑셀에서 보던 것과 동일한 모습으로 엑셀 워크시트를 화면에 표시해 줄 수 있다. IE 브라우저를 실행시키고 URL을 입력하는 곳에 엑셀 워크시트 파일 이름을 입력해 주면 브라우저가 직접 스프레드시트를 열어 보여줄 것이다. IE에서는 mime 타입을 결정하기 위해 확장자(extension)를 사용하며 그 확장자와 연결되어 있는 응용 프로그램을 이용하게 된다. IE가 엑셀의 mime 타입을 만나게 되면 곧바로 application/vnd.ms-excel 로 바꿔준다. 이렇게 해서 IE는 해당 파일을 출력하게 되는 것이다. 이 경우에는 엑셀 파일이므로 엑셀이 실행된다. 이제부터는 HTML 데이터 스트림을 엑셀 스프레드시트로 전달하고 IE 브라우저 내에서 HTML을 엑셀 워크북의 형태로 출력해 주는 ASP 페이지를 만들어 볼 것이다. ASP 페이지는 NWIND SQL서버 6.5로부터 직원 데이터 테이블의 레코드를 되돌려 주는 컴포넌트를 호출할 것이며 이렇게 얻어진 데이터는 HTML 테이블의 형태로 출력할 것이다. 그런 후에 프로그램 내부적으로 mine 타입을 엑셀의 mime 타입을 변경할 것이다.HTML 테이블의 생성 데모 프로그램을 만들기 위해서는 먼저 새로운 ASP 페이지를 만들고 이를 그림 A에 나와 있는 것처럼 Visual InterDev 프로젝트에 ContentType.asp라는 이름으로 추가해 넣어야 한다. 그런 후에 이 페이지에 리스트 A에 나와있는 코드를 추가해 넣는다.코드의 첫 줄은 요구된 페이지의 mime 타입을 엑셀의 것으로 변경해 준다.<%Response.ContentType = _application/vnd.ms-excel"%>그 뒤에 오는 몇 줄의 코드는 ADOR recordset을 얻기 위해 앞에서 만들었던 컴포넌트를 호출하게 된다. 그런 후에는 각 recordset에 대한 루프를 수행하며 리스트 A에 나와 있는 것처럼 각 레코드에 들어있는 데이터에 해당하는 HTML 테이블의 각 줄을 만들어 내기 위해 TABLE 태그로 시작해 몇 가지 내용이 오고 마지막이 태그로 끝나는 코드를 만들어 내게 된다. 이 코드를 모두 입력하고 나면 파일을 저장하고 그 페이지를 브라우저로 열어 본다. 불러들인 페이지는 그림 B와 같을 것이다.이 때 스프레드시트에 출력된 각 줄 에는 아무런 포맷팅도 없음에 주목하자. 엑셀 VBA 컴포넌트로 워크시트를 생성하는 경우에는 VBA 메쏘드를 이용해 출력물을 말끔하게 단장할 수 있었다. 하지만 HTML 스트림을 이용하는 방법에서는 HTML 테이블로부터 쉽게 읽고 출력할 수 있어야 하기 때문에 일반적으로 사용되는 유형의 포맷팅을 추가하기가 어렵다. 하지만 그 대신 =SUM 함수와 같이 현재 마이크로소프트 엑셀이 지원하는 함수는 어느 것이라도 집어 넣을 수 있다.또한 워크시트를 생성하기 위해 쓰여진 HTML에는 HTML이나 BODY와 같은 표준 태그를 포함하고 있지 않은 것에도 유의해야 한다. HTML 테이블을 엑셀 워크시트로 사용하려고 할 때에는 몇가지 유의해야 할 사항들이 있다. 절대로 액티브 서버 페이지에는 HTML, TITLE, BODY 또는 HEAD 태그가 포함되어서는 안된다. 이런 태그가 포함되어 있다면 엑셀 워크시트는 정상적으로 열리지 않을 수도 있다.HTML에서 표준 엑셀 함수 사용하기 엑셀 97은 엑셀 워크시트에서 출력되는 HTML 테이블 내에 합계나 누계와 같은 기본적인 연산 기능을 수행하기 위해 엑셀 수식(formulas)를 포함하는 것을 허용한다. 이런 기능은 여러가지 면에서 장점이 될 수 있다. 간단한 표 계산과 같은 작업을 클라이언트측으로 옮기게 되면 그 만큼 서버측의 처리 부하와 귀중한 자원의 소모가 줄어들게 되며 클라이언트와 서버간의 불필요한 데이터 교환도 크게 줄일 수 있다. 예를 들어 그림 C에 나와 있는 code.sumit.asp 라는 이름의 페이지는 엑셀 워크시트의 열 중 두개의 합을 계산해 출력하는 HTML 테이블을 생성한다. 코드는 리스트 B에 나와 있다. 이 코드는 앞에서 설명한 것과 유사하다. 첫번째 줄은 컨텐츠 타입을 엑셀로 변경해 브라우저가 이 HTML 텍스트를 어떤 응용 프로그램으로 전달할 지를 알려 준다. 그 다음에는 2개의 열이 있는 테이블을 생성한다. 두 번째 열의 각 행에는 2와 3 두개의 값이 들어 있으며 3번째 행에는 앞서 나온 두 숫자의 합을 표시하기 위한 엑셀 함수 =SUM(B1:B2)가 나와 있다. 이 페이지의 출력 결과는 그림 D와 같다.결론브라우저 기반의 응용 프로그램에서 엑셀 워크시트를 출력하는 방법에는 여러 가지가 있다. 이들 중 어떤 방법을 사용해야 할 것인지는 전적으로 다음의 질문에 대한 답에 의해 결정된다.-응용 프로그램의 동작은 서버 중심인가? 클라이언트 중심인가?-얼마나 많은 처리가 필요한가?-이용자의 브라우저가 IE인가?워크시트의 외양이 중요한 경우나 매우 복잡한 경우라면 엑셀 템플릿(Excel template)을 만들어 서버측 VBA COM 오브젝트로 값을 채워 넣는 것이 바람직하다. 하지만 워크시트가 간단한 경우나 클라이언트측의 처리가 요구되는 경우라면 HTML 스트림을 이용하는 방법도 고려해 볼 만 하다. 그렇지만 사용자가 넷스케이프 네비게이터를 사용하고 있다면 모든 처리를 서버측에서 COM VBA 컴포넌트로 담당해야만 한다.원문 작성일 : 1999/06/08