JSP/SERVLET
2020.09.21 / 11:15

HTML TableÀ» ¿¢¼¿·Î ³»º¸³»±â : Export to excel sheet on client side

XMaLL°ü¸®ÀÚ
Ãßõ ¼ö 180

   HTML TableÀ» ¿¢¼¿·Î ÀúÀåÇϱâ : Export to excel sheet on client side


1. <A> ¿¤¸®¸ÕÆ®ÀÇ download ¼Ó¼ºÀ» ÀÌ¿ëÇÏ¿© ÀúÀåÇϱâ.


2. <A> ¿¤¸®¸ÕÆ®ÀÇ download¼Ó¼º°ú URL¿¡ dataŸÀÔÀ» »ç¿ëÇϱâ, ¿¢¼¿ ÆÄÀÏ À̸§ ÁöÁ¤Çϱâ.


3. jquery.battatech.excelexport ¶óÀ̺귯¸®¸¦ »ç¿ëÇϱâ.


4. jquery.battatech.excelexport ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ¿© ÆÄÀÏÀ̸§ ÁöÁ¤Çϱâ.


5. jquery.battatech.excelexport ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ¿© ÆÄÀÏÀ̸§ ÁöÁ¤Çϱâ2.




   1. <A> ¿¤¸®¸ÕÆ®ÀÇ download ¼Ó¼ºÀ» ÀÌ¿ëÇÏ¿© ÀúÀåÇϱâ.


[ code ]

<!DOCTYPE html>
<html lang="en">
<head>
	<meta name="Author" content="serpiko@hanmail.net" />
	<meta name="description" content="http://serpiko.tistory.com" />

	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" />
	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
	<!--<meta name="viewport" content="width=device-width, initial-scale=1">-->
	<meta name="format-detection" content="telephone=no" />

	<link rel="styleesheet" type="text/css" href="" />
	<link rel="shortcut icon" href="" />
	<script src="https://code.jquery.com/jquery-1.11.2.min.js"></script>
	<title>Document</title>
	<style>
		* {
			box-sizing: border-box;
			-moz-box-sizing: border-box;
			-webkit-box-sizing: border-box;
		}
		table{
			width: 650px;
			text-align: center;
			border: 1px solid black;
		}
	</style>
</head>
<body>
	<div id="wrap">
		<table id='tblExport'>
			<thead>
				<tr>
					<th>No</th>
					<th>Title</th>
					<th>Type</th>
					<th>Author</th>
					<th>URL</th>
				</tr>
			</thead>
			<tbody>
				<tr>
					<td>1</td>
					<td>SAP : Study And Programming</td>
					<td>Blog</td>
					<td style='background-color: LightBlue;'>Serpiko</td>
					<td>http://serpiko.tistory.com/</td>
				</tr>
				<tr>
					<td>2</td>
					<td>Twitter</td>
					<td>SNS</td>
					<td>Obvious, LLC</td>
					<td>https://www.twitter.com/</td>
				</tr>
				<tr>
					<td>3</td>
					<td>Instagram</td>
					<td>SNS</td>
					<td>Kevin Systrom, Mike Krieger</td>
					<td>https://instagram.com/</td>
				</tr>
			</tbody>
		</table>

		<button id='btnExport' type='button'>Export</button>
	</div>

	<script>
		$(document).ready(function(){
			$('#btnExport').click(function(){
				var link = document.createElement('a');
				link.download = "myFirstExample.xls";
				link.href = 'data:,' + $('#tblExport').text();
				link.click();
			});
		});
	</script>
</body>
</html>

32 : table¿¡ id¸¦ ÁöÁ¤ÇØ ÁØ´Ù.
67 : buttonÀ» ¸¸µé°í id¸¦ ÁöÁ¤ÇØ ÁØ´Ù.
73 : »õ·Î¿î ¿¤¸®¸ÕÆ®ÀÎ <a>¸¦ ¸¸µé°í
74 : HTML5 ¿¡¼­ Ãß°¡µÈ ¼Ó¼ºÀÎ download ¼Ó¼º¿¡ ÆÄÀÏ À̸§ÀÎ "myFirstExample.xls"¸¦ ÁöÁ¤ÇØ ÁØ´Ù.
75 : URL¿¡ dataÇü½Ä, Ç¥½ÃµÉ ³»¿ëÀ» ³Ö°í
76 : <a> ¿¤¸®¸ÕÆ®¸¦ Ŭ¸¯ÇÑ °Í°ú °°Àº Æ®¸®°Å¸¦ ³Ö¾îÁØ´Ù.

[ Á÷Á¢ º¸±â ¡é www.serpiko.meximas.com/JAVASCRIPT/excel/01_dataUse.html ]


[°á°ú È­¸é]

myFirstExample.xls ·Î Á¦´ë·Î ÀúÀåµÇ°í ½ÇÇ൵ µÈ´Ù.

±×·¯³ª ¼¿¿¡ ³»¿ëÀ» »ìÆì º¸¸é Å×À̺íÀÌ ¾Æ´Ñ ÀÏ¹Ý ÅؽºÆ®·Î ³»¿ëÀÌ µé¾î°¡ À־ Ç¥ÀÇ ÇüÅ°¡ ¾Æ´Ï´Ù.




   2. <A> ¿¤¸®¸ÕÆ®ÀÇ download¼Ó¼º°ú URL¿¡ dataŸÀÔÀ» »ç¿ëÇϱâ, ¿¢¼¿ ÆÄÀÏ À̸§ ÁöÁ¤Çϱâ.


[ code ]


<!DOCTYPE html>
<html lang="en">
<head>
	<meta name="Author" content="serpiko@hanmail.net" />
	<meta name="description" content="http://serpiko.tistory.com" />

	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" />
	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
	<!--<meta name="viewport" content="width=device-width, initial-scale=1">-->
	<meta name="format-detection" content="telephone=no" />

	<link rel="styleesheet" type="text/css" href="" />
	<link rel="shortcut icon" href="" />
	<script src="https://code.jquery.com/jquery-1.11.2.min.js"></script>
	<title>Document</title>
	<style>
		* {
			box-sizing: border-box;
			-moz-box-sizing: border-box;
			-webkit-box-sizing: border-box;
		}
		table{
			width: 650px;
			text-align: center;
			border: 1px solid black;
		}
	</style>
</head>
<body>
	<div id="wrap">
		<table id='tblExport'>
			<thead>
				<tr>
					<th>No</th>
					<th>Title</th>
					<th>Type</th>
					<th>Author</th>
					<th>URL</th>
				</tr>
			</thead>
			<tbody>
				<tr>
					<td>1</td>
					<td>SAP : Study And Programming</td>
					<td>Blog</td>
					<td style='background-color: LightBlue;'>Serpiko</td>
					<td>http://serpiko.tistory.com/</td>
				</tr>
				<tr>
					<td>2</td>
					<td>Twitter</td>
					<td>SNS</td>
					<td>Obvious, LLC</td>
					<td>https://www.twitter.com/</td>
				</tr>
				<tr>
					<td>3</td>
					<td>Instagram</td>
					<td>SNS</td>
					<td>Kevin Systrom, Mike Krieger</td>
					<td>https://instagram.com/</td>
				</tr>
			</tbody>
		</table>

		<button id='btnExport' type='button'>Export</button>
	</div>

	<script>
		$(document).ready(function(){

			function itoStr($num)
			{
				$num < 10 ? $num = '0'+$num : $num;
				return $num.toString();
			}

			var btn = $('#btnExport');
			var tbl = 'tblExport';

			btn.click(function(e){

				var dt = new Date();
				var year =	itoStr( dt.getFullYear() );
				var month = itoStr( dt.getMonth() + 1 );
				var day =	itoStr( dt.getDate() );
				var hour =	itoStr( dt.getHours() );
				var mins =	itoStr( dt.getMinutes() );

				var postfix = year + month + day + "_" + hour + mins;
				var fileName = "MyTable_"+ postfix + ".xls";

				var a = document.createElement('a');
				var data_type = 'data:application/vnd.ms-excel';
				var table_div = document.getElementById( tbl );
				var table_html = table_div.outerHTML.replace(/ /g, '%20');

				a.href = data_type + ', ' + table_html;
				a.download = fileName;
				a.click();

				e.preventDefault();
			});
		});
	</script>
</body>
</html>


32 : table¿¡ id¸¦ ÁöÁ¤ÇØ ÁØ´Ù.
67 : buttonÀ» ¸¸µé°í id¸¦ ÁöÁ¤ÇØ ÁØ´Ù.
73 : 10 ÀÌÇÏÀÎ ¼ö´Â 0À» ºÙ¿©ÁØ´Ù. ¹Ýȯ°ªÀÇ Å¸ÀÔÀº ¹®ÀÚ¿­ ¼Ó¼ºÀÌ´Ù.
84 ~ 89 : ³â ¿ù ÀÏ ½Ã°£ ºÐ À» ÆÄÀÏÀ̸§¿¡ ¹ÙÀεù Çϱâ À§Çؼ­ ¼±¾ðµÈ º¯¼öµéÀ̸ç, 2015³â 4¿ù 3ÀÏÀÎ °æ¿ì
           2015 4 3 ÀÌ µÇ´Âµ¥ ¹®ÀÚ¿­ ¼Ó¼ºÀ¸·Î º¯È¯ÇÏÁö ¾ÊÀ¸¸é
91 : 91¹ø ¶óÀΠó·³ º¯¼ö+º¯¼ö¸¦ ÇÏ°Ô µÇ¸é ¿ì¸®°¡ ¿øÇÏ´Â "2015 + 4 + 3 = 201543" ÀÌ ¾Æ´Ï¶ó ¿¬»êÀÌ µÇ¾î¼­ 2022·Î º¯ÇÑ´Ù.
     µû¶ó¼­ ÀÏ´Ü ÇÑÀÚ¸´ ¼ö ÀÏ°æ¿ì 0À» ºÙ¿©ÁÖ°í ¹®ÀÚ¿­ ó¸®(73)¸¦ Çϸé "2015" + "04" + "03" ... ÀÌ µÇ°í  "20150403"ÀÌ µÈ´Ù.
97: outerHTMLÀ¸·Î <table id='tblExport'> ~ </table> ÀÇ ¹üÀ§±îÁö Àâ°í, 
   ( innerHTMLÀº <table id='tblExport> ÀÇ ¾È¿¡ÀÖ´Â <thead>~</tbody> ±îÁö¸¦ ´ë»óÀ¸·Î ÇÑ´Ù. )
 
     table_divÀÇ °ø¹éÀ»  %20À¸·Î ġȯÇÑ´Ù.  
     °ø¹éÀ» ġȯÇÏ´Â ÀÌÀ¯´Â "My Str Variables"¿Í °°ÀÌ ¶ç¾î¾²±âµÈ ºÎºÐÀ» %20À¸·Î ÀÎÄÚµù Çϱâ À§Çؼ­ À̸ç 
     2°¡Áö ¹æ¹ýÀÌÀÖ´Ù.

     var uri = "My Str Variables";

     encodeURI(uri); //°á°ú  : My%20Str%20Variables
     uri.replace(/ /g, '%20');   //°á°ú  : My%20Str%20Variables
    
     °á°ú´Â ¸ðµÎ °°´Ù.
     ´Ù½Ã Ç®¾î¼­ »ç¿ëÇÏ·Á¸é  console.log( decodeURI(str) ); // "My Str Variables"

94~101 : À§ (1. <A> ¿¤¸®¸ÕÆ®ÀÇ download ¼Ó¼ºÀ» ÀÌ¿ëÇÏ¿© ÀúÀåÇϱâ.) ¿¡¼­ ¼³¸íÇÑ ³»¿ë°ú °°´Ù.

103 : btn = $("#btnExport") ¸¦ Ŭ¸¯ÇßÀ» ¶§ ¹ß»ýµÇ´Â event¸¦ ó¸®Çϴµ¥ preventDefault¸¦ ¾²´Â ÀÌÀ¯´Â ´ÙÀ½°ú °°´Ù.
       ¤¡. ÇöÀç ¹öÆ°ÀÌ buttonÀÌ ¾Æ´Ñ A elementÀÌ°í A element¸¦ ¾²´Â ÀÌÀ¯´Â? ÆÄÀÏ ³×ÀÓÀ» ¹ÙÀεù Çϱâ À§Çؼ­ download¼Ó¼ºÀ» 
           »ç¿ëÇÏ°í ¿¢¼¿ ±â´ÉÀ» href¿¡ URL·Î »ç¿ëÇϱâ À§Çؼ­ ÀÌ´Ù.
       ¤¤. ±âÁ¸ <a>¸µÅ©¸¦ Ŭ¸¯ÇßÀ»¶§ ÀÌ ¿ä¼Ò¿¡ click À̺¥Æ® Çڵ鷯¸¦ µî·ÏÇÑ´Ù¸é, click À̺¥Æ® ½ÇÇà°ú µ¿½Ã¿¡ »õ·Î¿î ÆäÀÌÁö¸¦ 
            ·ÎµåÇÏ°Ô µÈ´Ù. ¸¶Âù°¡Áö·Î formµµ ±âº»µ¿ÀÛÀÎ submit À̺¥Æ®°¡ ¹ß»ýÇϴµ¥, ÀÌ·± ±âº» µ¿ÀÛÀ» ÁßÁö½ÃÅ°°í click À̺¥Æ®
            Çڵ鷯¸¸ ½ÇÇà ½ÃÅ°°Ô ÇÏ´Â ¹æ¹ýÀÌ ¹Ù·Î preventDefault ¸Þ¼­µå¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù.


[ Á÷Á¢ º¸±â ¡é  http://www.serpiko.meximas.com/JAVASCRIPT/excel/02_dataAndAuse.html ]




[°á°ú È­¸é ]


À§¿¡ »ìÆ캸¾Ò´ø °Í °ú ´Ù¸£°Ô Å×À̺íÀÇ ÇüŸ¦ À¯ÁöÇϸç, ÆÄÀÏÀ̸§µµ ÁöÁ¤ÇØ ÁÙ ¼ö ÀÖ´Ù. 


±×·¯³ª ÀÚ¼¼È÷ º¸¸é ¿¢¼¿ ƯÀ¯ÀÇ ±×¸®µå°¡ º¸ÀÌÁö ¾Ê´Â´Ù.






   3. jquery.battatech.excelexport ¶óÀ̺귯¸®¸¦ »ç¿ëÇϱâ.


1,2 ÀÇ ´ÜÁ¡À» ¸ðµÎ ÇØ°áÇØ ÁÙ jquery.battatech.excelexport ¶óÀ̺귯¸®¸¦ ¼Ò°³ÇÑ´Ù.


´Ü¼øÈ÷ TABLE element¸»°íµµ XML, JSON µîÀ» °°ÀÌ Áö¿øÇÑ´Ù.


´Ù¿î·Îµå https://github.com/battatech/battatech_excelexport


 jquery.techbytarun.excelexportjs.min.js

 jquery.techbytarun.excelexportjs.js



°³¿ä : http://battatech.com/blog/how-to-export-to-excel-sheet-on-client-side


±âº»»ç¿ë¹ýÀº ´ÙÀ½°ú °°´Ù.


[ code ]


<!DOCTYPE html>
<html lang="en">
<head>
	<meta name="Author" content="serpiko@hanmail.net" />
	<meta name="description" content="http://serpiko.tistory.com" />

	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" />
	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
	<!--<meta name="viewport" content="width=device-width, initial-scale=1">-->
	<meta name="format-detection" content="telephone=no" />

	<link rel="styleesheet" type="text/css" href="" />
	<link rel="shortcut icon" href="" />
	<script src="https://code.jquery.com/jquery-1.11.2.min.js"></script>
    <script type="text/javascript" src="js/jquery.battatech.excelexport.js"></script>
	<title>Document</title>
	<style>
		* {
			box-sizing: border-box;
			-moz-box-sizing: border-box;
			-webkit-box-sizing: border-box;
		}
		table{
			width: 650px;
			text-align: center;
			border: 1px solid black;
		}
	</style>
</head>
<body>
	<div id="wrap">
		<table id='tblExport'>
			<thead>
				<tr>
					<th>No</th>
					<th>Title</th>
					<th>Type</th>
					<th>Author</th>
					<th>URL</th>
				</tr>
			</thead>
			<tbody>
				<tr>
					<td>1</td>
					<td>SAP : Study And Programming</td>
					<td>Blog</td>
					<td style='background-color: LightBlue;'>Serpiko</td>
					<td>http://serpiko.tistory.com/</td>
				</tr>
				<tr>
					<td>2</td>
					<td>Twitter</td>
					<td>SNS</td>
					<td>Obvious, LLC</td>
					<td>https://www.twitter.com/</td>
				</tr>
				<tr>
					<td>3</td>
					<td>Instagram</td>
					<td>SNS</td>
					<td>Kevin Systrom, Mike Krieger</td>
					<td>https://instagram.com/</td>
				</tr>
			</tbody>
		</table>

		<button id='btnExport' type='button'>Export</button>
	</div>

	<script type="text/javascript">
    $(document).ready(function () {
        $("#btnExport").click(function () {
            $("#tblExport").excelexportjs({
                containerid: "tblExport"
               , datatype: 'table'
            });
        });
    });
	</script>
</body>
</html>

15 ~ 16 : ¿¢¼¿ ¶óÀ̺귯¸®¸¦ ºÒ·¯¿À±â Àü¿¡ ¹Ýµå½Ã Á¦ÀÌÄõ¸® ¿£ÁøÀÌ ¸ÕÀú È£ÃâµÇ¾î¾ß ÇÑ´Ù.

33 : Table¿¡ ID¸¦ ÁöÁ¤ÇØ ÁÖ°í

68 : Button ¿¡ ID¸¦ ÁöÁ¤ÇØ ÁØ´Ù.

73 : ¹öÆ°À» Ŭ¸¯Çϸé battatech_excelexport °´Ã¼¿¡ Á¢±ÙÇÏ¿© containerid´Â Å×À̺íÀ̸§, datatypeÀº table·Î ÁöÁ¤ÇØ ÁØ´Ù.


[ Á÷Á¢ º¸±â ¡é http://www.serpiko.meximas.com/JAVASCRIPT/excel/03_libTable.html ]



[ °á°ú È®ÀÎ ]


µåµð¾î ¸»²ûÇÏ°Ô ÀÌ»ó¾øÀÌ ´Ù Ãâ·ÂµÈ´Ù. ±×·¯³ª ÆÄÀϸíÀ» ÁöÁ¤ÇÏÁö ¾Ê¾Ò±â ¶§¹®¿¡ "´Ù¿î·Îµå.xls"·Î µÇ¾îÀÖ´Ù.





   4. jquery.battatech.excelexport ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ¿© ÆÄÀÏÀ̸§ ÁöÁ¤Çϱâ.


jquery.battatech.excelexport ¶óÀ̺귯¸®¿¡¼­ ÆÄÀϸíÀ» ÁöÁ¤ÇÏ´Â ¹æ¹ýÀº ´ÙÀ½°ú °°´Ù.


<!DOCTYPE html>
<html lang="en">
<head>
	<meta name="Author" content="serpiko@hanmail.net" />
	<meta name="description" content="http://serpiko.tistory.com" />

	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" />
	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
	<!--<meta name="viewport" content="width=device-width, initial-scale=1">-->
	<meta name="format-detection" content="telephone=no" />

	<link rel="styleesheet" type="text/css" href="" />
	<link rel="shortcut icon" href="" />
	<script src="https://code.jquery.com/jquery-1.11.2.min.js"></script>
    <script type="text/javascript" src="js/jquery.battatech.excelexport.js"></script>
	<title>Document</title>
	<style>
		* {
			box-sizing: border-box;
			-moz-box-sizing: border-box;
			-webkit-box-sizing: border-box;
		}
		table{
			width: 650px;
			text-align: center;
			border: 1px solid black;
		}
	</style>
</head>
<body>
	<div id="wrap">
		<table id='tblExport'>
			<thead>
				<tr>
					<th>No</th>
					<th>Title</th>
					<th>Type</th>
					<th>Author</th>
					<th>URL</th>
				</tr>
			</thead>
			<tbody>
				<tr>
					<td>1</td>
					<td>SAP : Study And Programming</td>
					<td>Blog</td>
					<td style='background-color: LightBlue;'>Serpiko</td>
					<td>http://serpiko.tistory.com/</td>
				</tr>
				<tr>
					<td>2</td>
					<td>Twitter</td>
					<td>SNS</td>
					<td>Obvious, LLC</td>
					<td>https://www.twitter.com/</td>
				</tr>
				<tr>
					<td>3</td>
					<td>Instagram</td>
					<td>SNS</td>
					<td>Kevin Systrom, Mike Krieger</td>
					<td>https://instagram.com/</td>
				</tr>
			</tbody>
		</table>

		<a id="btnExport" href="#" download="">Export</a>
	</div>

	<script type="text/javascript">
    $(document).ready(function () {
        $("#btnExport").on('click', function () {
            var uri = $("#tblExport").excelexportjs({
                containerid: "tblExport"
                , datatype: 'table'
                , returnUri: true
            });

            $(this).attr('download', 'ExportToExcel.xls').attr('href', uri).attr('target', '_blank');
        });
    });
	</script>
</body>
</html>

68 : À§¿¡¼­ ½è´ø ¹æ½Ä°ú ´Ù¸£°Ô button element°¡ ¾Æ´Ï¶ó <a> element¸¦ »ç¿ëÇÑ´Ù.

77 : battatech_excelexport°´Ã¼ÀÇ ¸â¹öº¯¼öÀÎ returnUri°¡ ±âº»°ªÀÌ false·Î µÇ¾îÀִµ¥ true·Î ¹Ù²Ù¾îÁØ´Ù.



Ãâó: https://serpiko.tistory.com/581 [»ðSAP(Study And Programming) Áú ºí·Î±×. byÇãÁ¤Áø]