Where The Streets Have No Name

JavaScript를 통한 Excel 파일 저장 본문

Developement/Web

JavaScript를 통한 Excel 파일 저장

highheat 2008. 9. 5. 15:43
출처 : http://blog.naver.com/jljlove7?Redirect=Log&logNo=90011463311

테이블 같은 것들 중에 DataGrid나 DataList, Repeater가 아닌 경우 엑셀 다운로드를 붙여달라고 하면
가슴이 콱 답답해지시는 분들을 위한 간단한 코드입니다.

IE에서만 동작(엑셀이 windows 니까 ..ㅡㅡ;; 거의 IE겠죠 ..)

IFRAME 유동적으로 만들어서 거기다 해당 객체의 데이터를 넣고
해당 객체는 saveExcel(''객체아이디'') 로 넣으시면 됩니다.
파일명을 강제하실 경우 saveExcel(''객체아이디'',''저장파일명.xls'') 로 넣으시면 됩니다.
해당 IFRAME을 execCommand  이용해서 html 문서를 확장자 .xls로 저장합니다.
(저장 창이 header에서 excel 타입을 강제한거랑은 조금 다르게 생겨먹었습니다. ㅋㅋㅋ)

우야둔둥..이건 1원으로는 너무 싼듯해서..10원짜리 팁입니다. ㅋㅋ

아래는 소스와 예제입니다.

 <script language="javascript">
/*
암때나 맘때루 고쳐서 사용하셔도 됩니다.
대충 후려갈겼습니다 -_-;
CopyRight ⓒ Thisisx since 2006.11.30
*/

function saveExcel(targetId,SaveFileName)
{
    if(document.all)
    {
        if(!document.all.excelExportFrame) // 프레임이 없으면 만들자~!
        {
            var excelFrame=document.createElement("iframe"); 
            excelFrame.id="excelExportFrame";
            excelFrame.position="absolute"; 
            excelFrame.style.zIndex=-1; 
            excelFrame.style.top="-10px"; 
            excelFrame.style.left="-10px"; 
            excelFrame.style.height="0px"; 
            excelFrame.style.width="0px"; 
            document.body.appendChild(excelFrame); // 아이프레임을 현재 문서에 쑤셔넣고..
        }
        var frmTarget = document.all.excelExportFrame.contentWindow.document; // 해당 아이프레임의 문서에 접근

        // content 타입은 넣으면 언젠가 MS에서 엑셀로 바로 열어주지 않을까해서.. 괜히 한번 선언해봤습니다. 
        frmTarget.open("application/vnd.ms-excel","replace"); 
        frmTarget.write(''<html>'');
        frmTarget.write(''<meta http-equiv=\"Content-Type\" content=\"application/vnd.ms-excel; charset=euc-kr\">\r\n''); // 별로..
        frmTarget.write(''<body>'');
        frmTarget.write(document.getElementById(targetId).outerHTML);  // tag를 포함한 데이터를 쑤셔넣고
        frmTarget.write(''</body>'');
        frmTarget.write(''</html>'');
        frmTarget.close();      

        //frmTarget.charset="UTF-8"; // 자 코드셋을 원하는걸로 맞추시고..
        frmTarget.charset="euc-kr";
        frmTarget.focus();

        if(!SaveFileName)
        {
            SaveFileName=''test.xls'';
        }
        frmTarget.execCommand(''SaveAs'',''false'',SaveFileName); // 저장을 호출합니다.
    }
   else
    {
        alert(''IE만 가능합니다.'');
    }
}
</script>

<table id="tblMain">
<tr>
    <td>웅냐    </td>
</tr>
</table>

<input type="button" value="excel" onclick="saveExcel(''tblMain'')">