본문 바로가기
IT-개발,DB

[개발] Javascript로 Excel파일 만들어보자

by SB리치퍼슨 2010. 10. 28.

Javascript로 Excel파일 만들어보자

테이블 같은 것들 중에 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')">

반응형

댓글