HTML5 + sheet.js ¸¦ ÀÌ¿ëÇÑ Å¬¶óÀ̾ðÆ® Excel parse
HTML5 + sheet.js ¸¦ ÀÌ¿ëÇÑ Å¬¶óÀ̾ðÆ® Excel parse
¹Ù¾ßÈå·Î 2017.05.31 ±âÁØ.
Ȥ½Ã³ª ½Í¾î¼ °Ë»öÇÑ °á°ú ÁøÀÛ¿¡ Ŭ¶óÀ̾ðÆ®¿¡¼µµ ¿¢¼¿ ÆĽÌ󸮰¡ °¡´ÉÇØÁ³´Ù.
ÀÏÀü¿¡ ½è´ø±ÛÀÎ "HTML TableÀ» ¿¢¼¿·Î ³»º¸³»±â : Export to excel sheet on client side" ¿¡¼´Â
¿¢¼¿ ÀúÀåÇϱ⸦ ´Ù·ç¾ú´Âµ¥ a ű×ÀÇ HTML5 ¼Ó¼ºÀÎ datatype°ú download¸¦ ÀÌ¿ëÇϸé Çü½Ä°ú ÆÄÀϸíÀ»
Á÷Á¢ ¸¸µé°í ÀúÀåÇϱⰡ °¡´ÉÇØÁ®¼ ¾à°£ÀÇ ±ÔÄ¢¸¸ ÁöŲ´Ù¸é ¶óÀ̺귯¸® µûÀ§¾ø¾îµµ ¿¢¼¿Çü½ÄÀ» °®Ãá ÆÄÀÏÀ»
¸¸µé ¼ö ÀÖ¾ú°í Å×ÀÌºí ¼¿ÀÇ ¼Ó¼ºÀ» ÀüºÎ ÀçÇöÇØ ³»°í ½ÍÀº °æ¿ì ¶óÀ̺귯¸®¸¦ »ç¿ëÇϸé (¾Æ¸¶) ¿¢¼¿À»
Ãâ·ÂÅ°À§ÇÑ Á¤È®ÇÑ Çì´õÆÄÀÏÀ» ÁöĪÇÏ°í ±× ½ºÅ¸ÀÏ(ȤÀº ű×)À» ¿Â°ÇÈ÷ ¹Ý¿µÇÑ Á¤µµ°¡ ºÐ¸íÇÒ °ÍÀ̱⿡
±×´ÙÁö »õ·Î¿î ³»¿ëÀ» Á¢ÇÑ ´À³¦Àº ¾Æ´Ï¾ú´Ù.
±×·¯³ª.
¿¢¼¿À» Àд´ٴ°ÍÀº binary ȤÀº Blob °°Àº raw data ¹öÆÛ󸮰¡ °¡´ÉÇÏ´Ù´Â ¾ê±âÀε¥..
óÀ½ ³» ¿¹»óÀº node.js¸¦ ÅëÇؼ »ç¿ëÇÑ ¹ÙÀ̳ʸ®Àбâ Á¤µµ·Î ¿¹»óÇßÀ¸³ª ( ¿ª½Ã npm¿¡ ÀÖÀ»ÁÙ ¾Ë¾Ò´Ù )1
ÆÄÀÏÀº HTML5ÀÇ °´Ã¼·Î Àаí, ÀÌÈÄÀÇ ³»¿ë Ãâ·ÂÀº ´É·ÂÀÚ°¡ ¿ÀǼҽº·Î ¸¸µç sheet.js ¶óÀ̺귯¸®¸¦ ÀÌ¿ëÇÏ¿©
binary ȤÀº base64 Çü½Ä¿¡ ´ëÇÑ ÆĽÌÀÌ °¡´ÉÇÏ´Ù.
ÀÚ¼¼ÇÑ ³»¿ëÀº °è¼Ó À̾°Ú´Ù.
HTML5 ÀÇ FileReader °´Ã¼
¸ÕÀú HTML5ÀÇ FileReader °´Ã¼´Â Ŭ¶óÀ̾ðÆ® File°´Ã¼ÀÇ ³»¿ëÀаí ÄÄÇ»ÅÍ¿¡ ÀúÀåÇϴ°ÍÀ» °¡´ÉÇÏ°Ô ÇØÁØ´Ù.
ÀÌ File°´Ã¼¸¦ ¾ò±â À§ÇÑ ¹æ¹ýÀº ¾Æ·¡¿Í °°Àº 3°¡Áö ¼Ö·ç¼ÇÀÌ ÀÖ´Ù.
1. ÈçÈ÷ »ç¿ëÇÏ´Â <input> ű׸¦ ÀÌ¿ëÇÏ¿© À¯Àú°¡ ¼±ÅÃÇÑ ÆÄÀϵéÀÇ °á°úÀÎ FileList °´Ã¼
2. µå·¡±× ¾Ø µå¶øÀ¸·Î ¹ÝȯµÈ DataTransfer °´Ã¼
3. HTML CanvasElementÀÇ mozGetAsFile() API ·Î ¾òÀ» ¼ö ÀÖ´Ù.
¼Ó¼º
FileReader.error
Read onlyDOMError
ÆÄÀÏÀ» Àд µµÁß¿¡ ¹ß»ýÇÑ ¿¡·¯¸¦ ³ªÅ¸³À´Ï´Ù.FileReader.readyState
Read onlyFileReaderÀÇ »óŸ¦ ³ªÅ¸³»´Â ¼ýÀÚÀÔ´Ï´Ù
.»óÅ °ªµé
EMPTY
:0
: ¾ÆÁ÷ µ¥ÀÌÅÍ°¡ ·Îµå µÇÁö ¾Ê¾ÒÀ½.LOADING
:1
: µ¥ÀÌÅÍ°¡ ·Îµù Áß.DONE
:2
: ¸ðµç Àб⠿äûÀÌ ¿Ï·áµÊ.FileReader.result
Read only- ÆÄÀÏÀÇ ÄÁÅÙÃ÷ÀÔ´Ï´Ù. ÀÌ ¼Ó¼ºÀº Àбâ ÀÛ¾÷ÀÌ ¿Ï·áµÇ°í Àбâ ÀÛ¾÷ÀÇ ÃʱâÈ¿¡ »ç¿ëÇÑ ¹æ½ÄÀ¸·Î °áÁ¤µÈ µ¥ÀÌÅÍÀÇ Æ÷¸ËÀÌ Á¤ÇØÁø ÈÄ¿¡ À¯È¿ÇÕ´Ï´Ù.
À̺¥Æ® Çڵ鷯
FileReader.onabort
abort
À̺¥Æ®ÀÇ Çڵ鷯. ÀÌ À̺¥Æ®´Â Àб⠵¿ÀÛÀÌ Áß´Ü µÉ ¶§¸¶´Ù ¹ß»ýÇÕ´Ï´Ù.FileReader.onerror
error
À̺¥Æ®ÀÇ Çڵ鷯. ÀÌ À̺¥Æ®´Â Àб⠵¿ÀÛ¿¡ ¿¡·¯°¡ »ý±æ ¶§¸¶´Ù ¹ß»ýÇÕ´Ï´Ù.FileReader.onload
load
À̺¥Æ®ÀÇ Çڵ鷯. ÀÌ À̺¥Æ®´Â Àб⠵¿ÀÛÀÌ ¼º°øÀûÀ¸·Î ¿Ï·á µÇ¾úÀ» ¶§¸¶´Ù ¹ß»ýÇÕ´Ï´Ù.FileReader.onloadstart
loadstart
À̺¥Æ® Çڵ鷯. ÀÌ À̺¥Æ®´Â Àб⠵¿ÀÛÀÌ ½ÇÇà µÉ ¶§¸¶´Ù ¹ß»ýÇÕ´Ï´Ù.FileReader.onloadend
loadend
À̺¥Æ® Çڵ鷯. ÀÌ À̺¥Æ®´Â Àб⠵¿ÀÛÀÌ ³¡³µÀ» ¶§¸¶´Ù ¹ß»ýÇÕ´Ï´Ù. (ÀбâÀÇ ¼º°øÀ̳ª ½ÇÆÐ ¿©ºÎ´Â »ó°ü ¾Ê½À´Ï´Ù.)FileReader.onprogress
progress
À̺¥Æ® Çڵ鷯. ÀÌ À̺¥Æ®´ÂBlob
ÄÁÅÙÆ®¸¦ Àд µ¿¾È È£ÃâµË´Ï´Ù.
¸Þ¼Òµå
FileReader.abort()
- Àб⠿äûÀ» ÁߴܽÃŵ´Ï´Ù. ¸®ÅÏÀÌ µÇ¸é readyState ´Â DONEÀÌ µË´Ï´Ù.
FileReader.readAsArrayBuffer()
- Starts reading the contents of the specified
Blob
, once finished, theresult
attribute contains anArrayBuffer
representing the file's data. FileReader.readAsBinaryString()
- Starts reading the contents of the specified
Blob
, once finished, theresult
attribute contains the raw binary data from the file as a string. FileReader.readAsDataURL()
- Starts reading the contents of the specified
Blob
, once finished, theresult
attribute contains adata:
URL representing the file's data. FileReader.readAsText()
- Starts reading the contents of the specified
Blob
, once finished, theresult
attribute contains the contents of the file as a text string.
Browser compatibility
Feature | Firefox (Gecko) | Chrome | Internet Explorer* | Opera* | Safari |
---|---|---|---|---|---|
Basic support | 3.6 (1.9.2) | 7 | 10 | 12.02 | 6.0.2 |
Ãâó : https://developer.mozilla.org/ko/docs/Web/API/FileReader
TIP )
²À FileReader¸¦ »ç¿ëÇؾßÇϳª? ±×°Ç ¾Æ´Ï´Ù. Uint8Array¸Þ¼µå¸¦ »ç¿ëÇÏ¸é ¹öÆÛÀбⰡ °¡´ÉÇÏ°í
¹öÆÛ¸¦ Àд´ٴ°ÍÀº ÀÐÀº ¹öÆÛ¸¦ ¸ðµÎ join½ÃÄѼ ¹ÙÀ̳ʸ®µ¥ÀÌÅÍ·Î °¡°øÇϴ°ÍÀÌ °¡´ÉÇÔÀ» À̾߱âÇÑ´Ù.
1 2 3 4 5 | /* convert data to binary string */ var data = new Uint8Array(arraybuffer); var arr = new Array(); for(var i = 0; i != data.length; ++i) arr[i] = String.fromCharCode(data[i]); var bstr = arr.join(""); | cs |
¶ÇÇÑ array buffer Àΰæ¿ì base64 ·Î ÀÎÄÚµùµµ °¡´ÉÇÏ´Ù.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | /* processing array buffers, only required for readAsArrayBuffer */ function fixdata(data) { var o = "", l = 0, w = 10240; for(; l<data.byteLength/w; ++l) o+=String.fromCharCode.apply(null,new Uint8Array(data.slice(l*w,l*w+w))); o+=String.fromCharCode.apply(null, new Uint8Array(data.slice(l*w))); return o; } var files = e.dataTransfer.files; var i,f; for (i = 0; i != files.length; ++i) { f = files[i]; var reader = new FileReader(); var name = f.name; reader.onload = function(e) { var data = e.target.result; /* if array buffer, convert to base64 */ var arr = fixdata(data); } } | cs |
³»¿ëÁ¤¸® : serpiko
Ãâó : https://sheetjs.gitbooks.io/docs/#ecmascript-5-compatibility
Javasscript Library Sheet.js
¿ÀǼҽº·Î Á¦ÀÛµÈ Sheet.js ( http://sheetjs.com/ ) ¿¡ ´ëÇÑ °£·«ÇÑ ¼Ò°³¸¦ ÇÏÀÚ¸é
½ºÇÁ·¹µå ½ÃÆ®ÀÇ º¹À⼺À» Ãß»óÈŲÈÄ ºê¶ó¿ìÀú¿¡¼ Àç»ýÇØÁØ´Ù.
ÀÌ ½ºÇÁ·¹µå½ÃÆ®¶ó´Â°ÍÀÌ ´ë·« 20°¡Áö°¡ Àִµ¥ ¾Æ·¡¿Í °°´Ù°í ÇÑ´Ù. ( ³ ±×³É Excel ¾ê±âÇÏ´ÂÁÙ ¾Ë¾Ò´Âµ¥... )
¾î·µç »ç¿ëÇÏ°íÀÖ´Â ÁÖ¿äÇÑ ½ºÇÁ·¹µå ½ÃÆ® Çü½ÄÀ» Áö¿øÇÑ´Ù°í Çϸç
Free your Data! ´ç½ÅÀÇ µ¥ÀÌÅ͸¦ ¹«·á·Î! ... Á¦ÀÏ ¸¶À½¿¡ ¿Í´ê´Â ¸»À̾ú´Ù.
±âº»»ç¿ë ¹æ¹ýÀº : https://github.com/SheetJS/js-xlsx
( Àß ¸ð¸£°Ú´õ¶óµµ ´ë·«¸¸ ÈȾ¸é Å« µµ¿òÀÌ µÈ´Ù. ´ÙÀ½ éÅÍ¿¡ »ùÇà Äڵ带 ¸¸µé¾îº¸¾Ò´Ù )
API ¹®¼´Â : https://sheetjs.gitbooks.io/docs/#installation
À» Âü°íÇÏ¸é µÈ´Ù.
¸¶Áö¸·À¸·Î Áö¿øÇÏ´Â ºê¶ó¿ìÀú´Â
SAMPLE CODE
°ø½ÄȨ¿¡¼ ¼Ò°³ÇÑ ÄÚµå¿Í utils ¸Þ¼µå¸¦ ÂüÁ¶ÇÑ µ¥ÀÌÅÍ ¾ò±â¸¦ Á¶ÇÕÀ» »ç¿ëÇؼ »ùÇà Äڵ带 ¸¸µé¾úÀ¸¸ç,
È£ÃâÇÒ ÆÄÀÏÀÎ ¿¢¼¿ÆÄÀϵµ ÁغñÇغ¸¾Ò´Ù.
( 2020. 03. 26 »ùÇà ÄÚµå ¼öÁ¤ )
ÆÄÀÏ ¾÷·Îµå => ¿¢¼¿ Çؼ® => °á°ú
HTML
JS
=============================================
( Ȥ½Ã³ª ¶óÀ̺귯¸®¸¦ ´Ù¿î¹Þ¾Æ »ç¿ëÇØ¾ß ÇÑ´Ù¸é ¾Æ·¡ÀÇ js¸¦ ´Ù¿î¹Þ¾Æ¼ script src='' ¿¡ ÁöÁ¤.. )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <input type="file" id="my_file_input" /> <div id='my_file_output'></div> <script src="https://code.jquery.com/jquery-1.11.2.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.10.3/xlsx.full.min.js"></script> <!-- <script lang="javascript" src="dist/xlsx.full.min.js"></script> --> <script> var rABS = true; // T : ¹ÙÀ̳ʸ®, F : ¾î·¹ÀÌ ¹öÆÛ // ¾î·¹ÀÌ ¹öÆÛ¸¦ ó¸®ÇÑ´Ù ( ¿ÀÁ÷ readAsArrayBuffer µ¥ÀÌÅ͸¸ °¡´ÉÇÏ´Ù ) function fixdata(data) { var o = "", l = 0, w = 10240; for(; l<data.byteLength/w; ++l) o+=String.fromCharCode.apply(null,new Uint8Array(data.slice(l*w,l*w+w))); o+=String.fromCharCode.apply(null, new Uint8Array(data.slice(l*w))); return o; } // µ¥ÀÌÅ͸¦ ¹ÙÀ̳ʸ® ½ºÆ®¸µÀ¸·Î ¾ò´Â´Ù. function getConvertDataToBin($data){ var arraybuffer = $data; var data = new Uint8Array(arraybuffer); var arr = new Array(); for(var i = 0; i != data.length; ++i) arr[i] = String.fromCharCode(data[i]); var bstr = arr.join(""); return bstr; } function handleFile(e) { var files = e.target.files; var i,f; for (i = 0; i != files.length; ++i) { f = files[i]; var reader = new FileReader(); var name = f.name; reader.onload = function(e) { var data = e.target.result; var workbook; if(rABS) { /* if binary string, read with type 'binary' */ workbook = XLSX.read(data, {type: 'binary'}); } else { /* if array buffer, convert to base64 */ var arr = fixdata(data); workbook = XLSX.read(btoa(arr), {type: 'base64'}); }//end. if /* ¿öÅ©ºÏ ó¸® */ workbook.SheetNames.forEach(function(item, index, array) { var csv = XLSX.utils.sheet_to_csv(workbook.Sheets[item]); var html = XLSX.utils.sheet_to_html(workbook.Sheets[item]); var json = XLSX.utils.sheet_to_json(workbook.Sheets[item]); var formulae = XLSX.utils.sheet_to_formulae(workbook.Sheets[item]); console.log(csv); console.log(html); console.log(json); console.log(formulae); $("#my_file_output").html(csv); });//end. forEach }; //end onload if(rABS) reader.readAsBinaryString(f); else reader.readAsArrayBuffer(f); }//end. for } var input_dom_element; $(function() { input_dom_element = document.getElementById('my_file_input'); if(input_dom_element.addEventListener) { input_dom_element.addEventListener('change', handleFile, false); } }); //http://sheetjs.com/ //https://github.com/SheetJS/js-xls </script> </body> </html> | cs |
°á°ú
³»¿ëÃß°¡ ( 2017.06.01 ) : sheet ³»¿ë ¾ò´Â 4°¡Áö ¹æ¹ý
À§ÀÇ SAMPLE_CODE Ç׸ñÀÇ workbook.SheetNames.forEach ºÎºÐ¿¡¼ XLSX °´Ã¼¸¦ ¼øȸÇϸç
sheets Á¤º¸¸¦ °¡Á®¿À´Â ºÎºÐÀÎ 43¹ø ¶óÀο¡¼ Àû¿ëÇß¾ú´ø ºÎºÐ Áß,
Export µ¥ÀÌÅÍŸÀÔÀ» ÀüºÎ ¾Ë¾Æº¸°í, ÀÌ Áß ÁÖ¿äÇÑ ¿É¼ÇÀ» Àû¿ëÇØ º¸¾Ò´Ù.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | // CSV var csv = XLSX.utils.sheet_to_csv(workbook.Sheets[item]); // default : "," var csvToFS = XLSX.utils.sheet_to_csv(workbook.Sheets[item], {FS:"\t"} ); // "Field Separator" delimiter between fields var csvToFSRS = XLSX.utils.sheet_to_csv(workbook.Sheets[item], {FS:":",RS:"|"} ); // "\n" "Record Separator" delimiter between rows // html var html = XLSX.utils.sheet_to_html(workbook.Sheets[item]); var htmlHF = XLSX.utils.sheet_to_html(workbook.Sheets[item], {header:"<html><title='custom'><body><table>", footer:"</table><body></html>"}); var htmlTable = XLSX.utils.sheet_to_html(workbook.Sheets[item], {header:"<table border='1'>", footer:"</table>"}); // json var json = XLSX.utils.sheet_to_json(workbook.Sheets[item]); //formulae var formulae = XLSX.utils.sheet_to_formulae(workbook.Sheets[item]); formulae.filter(function(v,i){return i%13 === 0;}); console.group("CSV"); console.log(csv); console.log(csvToFS); console.log(csvToFSRS); console.groupEnd(); console.group("html"); console.log(html); console.log(htmlHF); console.log(htmlTable); console.groupEnd(); console.group("json"); console.log(json); console.groupEnd(); console.group("formulae"); console.log(formulae); console.groupEnd(); | cs |
CSV
2¹ø ¶óÀÎ : csv·Î °¡Á®¿À±â¿¡¼ ±âº»°ªÀº , (ÄÞ¸¶) ÀÌ´Ù.
ex) A, B, C,
A1_vaule, B1_value, C1_value ....
3¹ø ¶óÀÎ : csv·Î °¡Á®¿À±â¿¡¼ FS ¿É¼ÇÀº Field Separator·Î½á ÇÊµå »çÀÌÀÇ ±¸ºÐ ±âÈ£¸¦ ÁöÁ¤ÇØ ÁÙ¼öÀÖ´Ù.
¿©±â¼ \t ÀÇ °æ¿ì ¼öÆòÅÇÀÌ´Ù. ( log ·Î Ç¥ÇöµÇ´Â ÅÇ °ø¹éÀº ½ºÆäÀ̽º¹Ù Å°·Î 3Ä Á¤µµµÈ´Ù )
ex) A B C
A1_vaule B1_vaule C1_vaule.....
4¹ø ¶óÀÎ : csv·Î °¡Á®¿À±â¿¡¼ RS ¿É¼ÇÀº Record Separator ·Î½á Çà°£ÀÇ ±¸ºÐ ±âÈ£¸¦ ÁöÁ¤ÇØ ÁÙ¼öÀÖ´Ù.
FS ·Î : ¿É¼ÇÀ», RS ·Î | ¿É¼ÇÀ» »ç¿ëÇÏ¿´±â ¶§¹®¿¡ ¾Æ·¡¿Í °°ÀÌ Ç¥ÇöµÈ´Ù.
ex) A1:B1:C1|A1_value:B1_value:C1_value|A2_value:B2_value:C2_value|....
½Ç¹«¿¡¼´Â 4¹ø ¶óÀÎó·³ Çʵ忡 : (COLON) À¸·Î °ªÀ» ºÐÇÒÇÏ°í, ·¹ÄÚµåÀÇ Çà(ROW)¿¡´Â | (PIPE) ·Î ¸íÈ®ÇÏ°Ô
±¸ºÐÁö¾îÁÖ¸é : ¿Í | ¸¦ TockenÀ¸·Î »ç¿ëÇÏ¿© º¸´Ù ¸íÈ®ÇÏ°í ½±°Ô »ç¿ëÇÒ ¼ö ÀÖÀ»°ÍÀÌ´Ù.
HTML
7¹ø ¶óÀÎ : html·Î °¡Á®¿À±â¿¡¼ ¿É¼ÇÀÌ ¾ø´Â °æ¿ì
<html><head><title> ~~ <table> ½ÇÁ¦ ÆĽ̺»ºÐ ~~ </html> ±îÁö ¿ÏÀüÇÑ html ¹®¼¸¦ ¹ÝȯÇÑ´Ù.
¹°·Ð typeof ¸¦ Âï¾îº¸¸é String ÀÌÁö¸¸ º¸Åë ¹Ù·Î »ç¿ëÇÒ¼ö ¾ø´Â ÇüÅÂÀ̱⠶§¹®¿¡
8¹ø ¶óÀÎ : ¿É¼ÇÀ¸·Î header, footer ¸¦ ÁÖ¸é °¢°¢ ¿É¼ÇÀ» Á÷Á¢ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.
9¹ø ¶óÀÎ : ½Ç¹«¿¡¼ ¹Ù·Î »ç¿ëÇϱ⿡ Á¦ÀÏ ÀûÇÕÇÑ ¿É¼ÇÀÌ´Ù. header:"<table>", footer:"</table>" ¸¦ ÁÖ¸é
ºñ·Î¼Ò ¿ÏÀüÇÑ Å×À̺í·Î ¿¤¸®¸ÕÆ®¸¦ ¾òÀ» ¼ö ÀÖ°ÔµÇ¸ç ¿©±â¿¡ ¾à°£ÀÇ css¸¸ Ãß°¡ÇÑ´Ù¸é
±ò²ûÇÑ Å×ÀÌºí °á°ú¹°ÀÌ Ãâ·ÂµÉ °ÍÀÌ´Ù.
Export ÀÇ ´õ ÀÚ¼¼ÇÑ ³»¿ëÀº https://github.com/SheetJS/js-xlsx#formulae-output ºÎÅÍ Âü°íÇÏ¸é µÈ´Ù.
°á°ú
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <input type="file" id="my_file_input" /> <div id='my_file_output'></div> <script src="https://code.jquery.com/jquery-1.11.2.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.10.3/xlsx.full.min.js"></script> <!-- <script lang="javascript" src="dist/xlsx.full.min.js"></script> --> <script> var rABS = true; // T : ¹ÙÀ̳ʸ®, F : ¾î·¹ÀÌ ¹öÆÛ // ¾î·¹ÀÌ ¹öÆÛ¸¦ ó¸®ÇÑ´Ù ( ¿ÀÁ÷ readAsArrayBuffer µ¥ÀÌÅ͸¸ °¡´ÉÇÏ´Ù ) function fixdata(data) { var o = "", l = 0, w = 10240; for(; l<data.byteLength/w; ++l) o+=String.fromCharCode.apply(null,new Uint8Array(data.slice(l*w,l*w+w))); o+=String.fromCharCode.apply(null, new Uint8Array(data.slice(l*w))); return o; } // µ¥ÀÌÅ͸¦ ¹ÙÀ̳ʸ® ½ºÆ®¸µÀ¸·Î ¾ò´Â´Ù. function getConvertDataToBin($data){ var arraybuffer = $data; var data = new Uint8Array(arraybuffer); var arr = new Array(); for(var i = 0; i != data.length; ++i) arr[i] = String.fromCharCode(data[i]); var bstr = arr.join(""); return bstr; } function handleFile(e) { var files = e.target.files; var i,f; for (i = 0; i != files.length; ++i) { f = files[i]; var reader = new FileReader(); var name = f.name; reader.onload = function(e) { var data = e.target.result; var workbook; if(rABS) { /* if binary string, read with type 'binary' */ workbook = XLSX.read(data, {type: 'binary'}); } else { /* if array buffer, convert to base64 */ var arr = fixdata(data); workbook = XLSX.read(btoa(arr), {type: 'base64'}); }//end. if /* ¿öÅ©ºÏ ó¸® */ workbook.SheetNames.forEach(function(item, index, array) { // CSV var csv = XLSX.utils.sheet_to_csv(workbook.Sheets[item]); // default : "," var csvToFS = XLSX.utils.sheet_to_csv(workbook.Sheets[item], {FS:"\t"} ); // "Field Separator" delimiter between fields var csvToFSRS = XLSX.utils.sheet_to_csv(workbook.Sheets[item], {FS:":",RS:"|"} ); // "\n" "Record Separator" delimiter between rows // html var html = XLSX.utils.sheet_to_html(workbook.Sheets[item]); var htmlHF = XLSX.utils.sheet_to_html(workbook.Sheets[item], {header:"<html><title='custom'><body><table>", footer:"</table><body></html>"}); var htmlTable = XLSX.utils.sheet_to_html(workbook.Sheets[item], {header:"<table border='1'>", footer:"</table>"}); // json var json = XLSX.utils.sheet_to_json(workbook.Sheets[item]); //formulae var formulae = XLSX.utils.sheet_to_formulae(workbook.Sheets[item]); formulae.filter(function(v,i){return i%13 === 0;}); console.group("CSV"); console.log(csv); console.log(csvToFS); console.log(csvToFSRS); console.groupEnd(); console.group("html"); console.log(html); console.log(htmlHF); console.log(htmlTable); console.groupEnd(); console.group("json"); console.log(json); console.groupEnd(); console.group("formulae"); console.log(formulae); console.groupEnd(); $("#my_file_output").html(htmlTable); });//end. forEach }; //end onload if(rABS) reader.readAsBinaryString(f); else reader.readAsArrayBuffer(f); }//end. for } var input_dom_element; $(function() { input_dom_element = document.getElementById('my_file_input'); if(input_dom_element.addEventListener) { input_dom_element.addEventListener('change', handleFile, false); } }); //http://sheetjs.com/ //https://github.com/SheetJS/js-xls </script> </body> </html> | cs |
Ãâó: https://serpiko.tistory.com/636 [»ðSAP(Study And Programming) Áú ºí·Î±×. byÇãÁ¤Áø]
html )
Å©·Ò °³¹ßÀÚ µµ±¸ Developer Tools )
³»¿ëÃß°¡ ( 2017.06.08 ) : ½Ç¹«¿¡¼ »ç¿ëÇÏ´Â ÄÚµå
¸ÕÀú À§ÀÇ XLSX.utils.sheet_to_csv(workbook.Sheets[item], {FS:":",RS:"|"} ); ºÎºÐÀ» Á¶±Ý ´õ
»ç¿ëÇϱ⠽¬¿î json À¸·Î º¯°æÇÏ´Â ÇÔ¼ö¸¦ ¸¸µé¾ú´Ù.
À§¿¡¼ »ç¿ëÇß´ø XLSX.utils.sheet_to_json(workbook.Sheets[item]); ±¸¹®Àº ÀÌÄ÷(=)°ú ¾ËÆĺªµµ Á¦°øÇϱä Çϴµ¥ ¸íÈ®ÇÏ°Ô ³»°¡ ÁöÁ¤ÇÑ ÅäÅ«À¸·Î ºÐ¸®Çϴ°ÍÀÌ
³ªÀ»°Í °°¾Æ¼ ÇÔ¼ö¸¦ Ãß°¡ÇÏ¿© »ç¿ë.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | // XLSX.utils.sheet_to_json °¡ ¿ØÁö ¾²±â ´õ ºÒÆíÇÏ´Ù. ±×³É csv¿¡ FS, RS ÅäÅ«À» ³Ö°í ºÐ¸®Çس»´Â ÇÔ¼ö¸¦ ¸¸µé¾ú´Ù. getCsvToJson : function( $csv ){ //var row = $obj.filter(function(v,i){return i%5 === 0;}); var startRow = this.defaultObj.startRow || 4; var csvSP = $csv.split( "|" ); var csvRow = [], csvCell = []; //var cellName = ["No", "W_FROM", "TAGNAME", "VAL_V ¾ÆÁ÷¾Ë¼ö¾øÀ½", "L_TYPE", "L_S_SIZE", "L_S_CNT", "L_CALC", "VL_V", "VL_PCNT", "MC_PCNT", "MC_AF", "MC_AT"]; var cellName = ["W_FROM", "TAGNAME", "L_TYPE", "L_S_SIZE", "L_S_CNT", "L_CALC", "VL_V", "VL_PCNT", "MC_PCNT", "MC_AF", "MC_AT"]; csvSP.forEach(function(item, index, array){ var patt = new RegExp(":"); // Ãà¾àÇüpatt = /:/ ´ë½Å... var isExistTocken = patt.test( item ); if( isExistTocken && ( startRow - 1 ) <= index ){ csvRow.push( item ); } }); csvRow.forEach(function(item, index, array){ var row = item.split(":"); var obj = {}; row.forEach(function(item, index, array){ obj[ cellName[index] ] = item; }); csvCell[index] = obj; }); return csvCell; //console.log( csvCell ); }, | cs |
½Ç¹«¿¡¼ »ç¿ëÇÑ ÀϺΠÄÚµå.
´ÙÀ½°ú °°ÀÌ Excel Ŭ·¡½º¿Í È£Ãâ Ŭ·¡½º ºÐ¸®ÇÏ°í µ¥ÀÌÅÍ´Â ÄݹéÀ¸·Î ¾ò¾î¼ »ç¿ëÇÏ¸é µÉµíÇÏ´Ù.
ExcelParse.js : Excel ÆĽ̶óÀ̺귯¸®¸¦ »ç¿ëÇϱâÀ§ÇÑ Ã³¸®¿Í µ¥ÀÌÅÍ °¡°ø´ã´ç
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 | /* -------------------------------------------------------- * * ExcelParse * -----------------------------------------------------------*/ var ExcelParse = function($Control, $obj){ //private var name = "ExcelParse"; var author = "ÇãÁ¤Áø"; var ver = "2017.06.01"; //public this.name = name; this.control = $Control; this.elementDefined = this.inherit( ElementDefined, this.elementDefined ); //¿¤¸®¸ÕÆ®¸¸ »ç¿ëÇϱâÀ§Çؼ °´Ã¼ »ó¼Ó this.model = $Control.model; //extend this.defaultObj = { validFileExtensions : [".xlsx", ".xls"], rABS : true, // T : ¹ÙÀ̳ʸ®, F : ¾î·¹ÀÌ ¹öÆÛ startRow : 4 }; for(var key in $obj) if( $obj.hasOwnProperty(key) ) this.defaultObj[key] = $obj[key]; //build this.build(); }//end. ExcelParse ExcelParse.prototype = (function(){ return{ constructor: ExcelParse, // build: function(){ // if( typeof this.control == "undefined" || this.control.name != "Control" ){ // throw new Error( "["+this.name+"] : Control °´Ã¼¸¦ »ó¼Ó¹ÞÁö ¸øÇß½À´Ï´Ù. Control °´Ã¼¸¦ ¸ÕÀú '»ý¼º'ÇØ ÁÖ¼¼¿ä." ); // return false; // } var $this = this; }, inherit: function( Parent, Child ){ Child = function(){ Parent.call( this ); } try{ if (!Object.create) { Object.create = (function(){ function F(){} return function(o){ if (arguments.length != 1) { throw new Error('Object.create implementation only accepts one parameter.'); } F.prototype = o; return new F(); } })(); } Child.prototype = Object.create( Parent.prototype ); Child.prototype.constructor = Child; //override //Child.prototype.build = function(){ alert('hi, I am a Child'); }; var child = new Child(); if(child instanceof Parent === true) return child; else return new Parent(); }catch(e){ throw new Error( "[ inherit Error ] : "+ Parent.name +"°´Ã¼¸¦ »ó¼Ó¹ÞÁö ¸øÇß½À´Ï´Ù. "+ Parent.name +" °´Ã¼¸¦ 'È®ÀÎ'ÇØ ÁÖ¼¼¿ä." ); } }, init:function(){ }, destroy: function(){ //$(document).off("click", ""); //ÁÖÀÇ!!. dispose´Â ¸Ç ¸¶Áö¸·À¸·Î ½ÇÇàÇÑ´Ù. ¼Ò°Å. this.dispose(); }, dispose: function(){ var object = this; var objectPrototype = object.__proto__; for( var key in object ){ if( object.hasOwnProperty(key) ){ delete object[key]; } } delete this.prototype; return; for( var key in objectPrototype ){ if( objectPrototype.hasOwnProperty(key) ){ delete objectPrototype[key]; } } }, //end. dispose addEventListener: function(){ $this = this; }, // ¾î·¹ÀÌ ¹öÆÛ¸¦ ó¸®ÇÑ´Ù ( ¿ÀÁ÷ readAsArrayBuffer µ¥ÀÌÅ͸¸ °¡´ÉÇÏ´Ù ) fixdata : function(){ var o = "", l = 0, w = 10240; for(; l<data.byteLength/w; ++l) o+=String.fromCharCode.apply(null,new Uint8Array(data.slice(l*w,l*w+w))); o+=String.fromCharCode.apply(null, new Uint8Array(data.slice(l*w))); return o; }, // µ¥ÀÌÅ͸¦ ¹ÙÀ̳ʸ® ½ºÆ®¸µÀ¸·Î ¾ò´Â´Ù. getConvertDataToBin : function(){ var arraybuffer = $data; var data = new Uint8Array(arraybuffer); var arr = new Array(); for(var i = 0; i != data.length; ++i) arr[i] = String.fromCharCode(data[i]); var bstr = arr.join(""); return bstr; }, handleFile : function(e, $callback){ var $this = this; //¾÷·Îµå µÉ ÆÄÀÏ Á¸ÀçÀ¯¹« °Ë»ç var excel_file_input = $this.control.elementDefined.excel_file_input; if( 0 == excel_file_input[0].files.length ){ alert("ÆÄÀÏÀ» ¾÷·ÎµåÇØÁÖ¼¼¿ä"); excel_file_input.focus(); return false; } //¾÷·Îµå µÉ ÆÄÀÏ È®ÀåÀÚ °Ë»ç var SearchForm = $this.control.elementDefined.SearchForm; if( !$this.validate( SearchForm ) ) return false; //ÀÌÇÏ ·ÎÁ÷½ÇÇà var files = excel_file_input[0].files; //var files = e.target.files; var i,f; for (i = 0; i != files.length; ++i) { f = files[i]; var reader = new FileReader(); var name = f.name; reader.onload = function(e) { var data = e.target.result; var workbook, htmlTable = null, csvToFSRS = null; if( $this.defaultObj.rABS ) { /* if binary string, read with type 'binary' */ workbook = XLSX.read(data, {type: 'binary'}); } else { /* if array buffer, convert to base64 */ var arr = fixdata(data); workbook = XLSX.read(btoa(arr), {type: 'base64'}); }//end. if /* ¿öÅ©ºÏ ó¸® */ workbook.SheetNames.forEach(function(item, index, array) { /* // CSV var csv = XLSX.utils.sheet_to_csv(workbook.Sheets[item]); // default : "," var csvToFS = XLSX.utils.sheet_to_csv(workbook.Sheets[item], {FS:"\t"} ); // "Field Separator" delimiter between fields var csvToFSRS = XLSX.utils.sheet_to_csv(workbook.Sheets[item], {FS:":",RS:"|"} ); // "\n" "Record Separator" delimiter between rows // html var html = XLSX.utils.sheet_to_html(workbook.Sheets[item]); var htmlHF = XLSX.utils.sheet_to_html(workbook.Sheets[item], {header:"<html><title='custom'><body><table>", footer:"</table><body></html>"}); var htmlTable = XLSX.utils.sheet_to_html(workbook.Sheets[item], {header:"<table border='1'>", footer:"</table>"}); // json var json = XLSX.utils.sheet_to_json(workbook.Sheets[item]); //formulae var formulae = XLSX.utils.sheet_to_formulae(workbook.Sheets[item]); */ htmlTable = XLSX.utils.sheet_to_html(workbook.Sheets[item], {header:"<table class='table table-striped table-hover table-borderd table-excel-parse'>", footer:"</table>"}); csvToFSRS = XLSX.utils.sheet_to_csv(workbook.Sheets[item], {FS:":",RS:"|"} ); // "\n" "Record Separator" delimiter between rows });//end. forEach var obj = {}; obj.json = $this.getCsvToJson( csvToFSRS ); obj.table = htmlTable; $callback( obj ); // ºñµ¿±âÇÔ¼ö }; //end onload if($this.defaultObj.rABS) reader.readAsBinaryString(f); else reader.readAsArrayBuffer(f); return true; }//end. for }, // XLSX.utils.sheet_to_json °¡ ¿ØÁö ¾²±â ´õ ºÒÆíÇÏ´Ù. ±×³É csv¿¡ FS, RS ÅäÅ«À» ³Ö°í ºÐ¸®Çس»´Â ÇÔ¼ö¸¦ ¸¸µé¾ú´Ù. getCsvToJson : function( $csv ){ //var row = $obj.filter(function(v,i){return i%5 === 0;}); var startRow = this.defaultObj.startRow || 4; var csvSP = $csv.split( "|" ); var csvRow = [], csvCell = []; //var cellName = ["No", "W_FROM", "TAGNAME", "VAL_V ¾ÆÁ÷¾Ë¼ö¾øÀ½", "L_TYPE", "L_S_SIZE", "L_S_CNT", "L_CALC", "VL_V", "VL_PCNT", "MC_PCNT", "MC_AF", "MC_AT"]; var cellName = ["W_FROM", "TAGNAME", "L_TYPE", "L_S_SIZE", "L_S_CNT", "L_CALC", "VL_V", "VL_PCNT", "MC_PCNT", "MC_AF", "MC_AT"]; csvSP.forEach(function(item, index, array){ var patt = new RegExp(":"); // Ãà¾àÇüpatt = /:/ ´ë½Å... var isExistTocken = patt.test( item ); if( isExistTocken && ( startRow - 1 ) <= index ){ csvRow.push( item ); } }); csvRow.forEach(function(item, index, array){ var row = item.split(":"); var obj = {}; row.forEach(function(item, index, array){ obj[ cellName[index] ] = item; }); csvCell[index] = obj; }); return csvCell; //console.log( csvCell ); }, /****************************************************************************************************************** * * validate * ******************************************************************************************************************/ validate: function(oForm){ var _validFileExtensions = this.defaultObj.validFileExtensions || [".jpg", ".jpeg", ".bmp", ".gif", ".png"]; var arrInputs = oForm.find("input"); for (var i = 0; i < arrInputs.length; i++) { var oInput = arrInputs[i]; if (oInput.type == "file") { var sFileName = oInput.value; if (sFileName.length > 0) { var blnValid = false; for (var j = 0; j < _validFileExtensions.length; j++) { var sCurExtension = _validFileExtensions[j]; if (sFileName.substr(sFileName.length - sCurExtension.length, sCurExtension.length).toLowerCase() == sCurExtension.toLowerCase()) { blnValid = true; break; } } if (!blnValid) { alert("°æ°í, " + sFileName + " ´Â À¯È¿ÇÏÁö¾ÊÀº ÆÄÀÏÀÔ´Ï´Ù.\n\n¾÷·Îµå´Â ´ÙÀ½Çü½ÄÀ» Áö¿øÇÕ´Ï´Ù : " + _validFileExtensions.join(", ")); return false; } } } } return true; }, }; })(); | cs |
BuildList.js : ExcelParse ¸¦ Cotrol °´Ã¼¸¦ ÅëÇÏ »ç¿ë
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 | /* -------------------------------------------------------- * * BuildList * -----------------------------------------------------------*/ var BuildList = function($Control, $obj){ //private var name = "BuildList"; var author = "ÇãÁ¤Áø"; var ver = "2017.06.07"; //public this.name = name; this.control = $Control; this.elementDefined = this.inherit( ElementDefined, this.elementDefined ); //¿¤¸®¸ÕÆ®¸¸ »ç¿ëÇϱâÀ§Çؼ °´Ã¼ »ó¼Ó this.model = $Control.model; this.excelJson = {}; this.OBJID = null; //extend this.defaultObj = { autoGrid : null, // ÁÖÀÇ. menu_2_2.js ¿¡¼ autogrid ´Â ÇϳªÀÇ °´Ã¼¸¸ »ý¼ºÈÄ¿¡ ÂüÁ¶ÇÏ¿© °øÀ¯ÇÑ´Ù. sampleExcelFilePath : this.model.sampleExcelFilePath || $Config['Template']+"/download/fems_sample.xlsx", sampleExcelImgPath : this.model.sampleExcelImgPath || $Config['Template']+"/images/1_SYMBOL.png", sampleExcelICONID : this.model.sampleExcelICONID || "ICONID_1", sampleExcelImgW : this.model.sampleExcelImgW || 51, sampleExcelImgH : this.model.sampleExcelImgH || 51 }; for(var key in $obj) if( $obj.hasOwnProperty(key) ) this.defaultObj[key] = $obj[key]; //build this.build(); }//end. BuildList BuildList.prototype = (function(){ return{ constructor: BuildList, // build: function(){ // if( typeof this.control == "undefined" || this.control.name != "Control" ){ // throw new Error( "["+this.name+"] : Control °´Ã¼¸¦ »ó¼Ó¹ÞÁö ¸øÇß½À´Ï´Ù. Control °´Ã¼¸¦ ¸ÕÀú '»ý¼º'ÇØ ÁÖ¼¼¿ä." ); // return false; // } var $this = this; $this.elementDefined.display_build_list.show(); $this.sendRequestSearch(); $this.responseHeight(); $this.addEventListener(); }, inherit: function( Parent, Child ){ Child = function(){ Parent.call( this ); } try{ if (!Object.create) { Object.create = (function(){ function F(){} return function(o){ if (arguments.length != 1) { throw new Error('Object.create implementation only accepts one parameter.'); } F.prototype = o; return new F(); } })(); } Child.prototype = Object.create( Parent.prototype ); Child.prototype.constructor = Child; //override //Child.prototype.build = function(){ alert('hi, I am a Child'); }; var child = new Child(); if(child instanceof Parent === true) return child; else return new Parent(); }catch(e){ throw new Error( "[ inherit Error ] : "+ Parent.name +"°´Ã¼¸¦ »ó¼Ó¹ÞÁö ¸øÇß½À´Ï´Ù. "+ Parent.name +" °´Ã¼¸¦ 'È®ÀÎ'ÇØ ÁÖ¼¼¿ä." ); } }, init:function(){ var $this = this; if( $this.defaultObj.autoGrid != null ) $this.defaultObj.autoGrid.init(); //¿ÀÅä±×¸®µåÀÇ x,y¸¦ ´Ù½Ã 0,0À¸·Î µÇµ¹¸³´Ï´Ù }, destroy: function(){ //$(document).off("click", ""); //ÁÖÀÇ!!. dispose´Â ¸Ç ¸¶Áö¸·À¸·Î ½ÇÇàÇÑ´Ù. ¼Ò°Å. this.dispose(); }, dispose: function(){ var object = this; var objectPrototype = object.__proto__; for( var key in object ){ if( object.hasOwnProperty(key) ){ delete object[key]; } } delete this.prototype; return; for( var key in objectPrototype ){ if( objectPrototype.hasOwnProperty(key) ){ delete objectPrototype[key]; } } }, //end. dispose addEventListener: function(){ var $this = this; var el = $this.elementDefined; var excelParse = $this.control.excelParse; // ¸®»çÀÌÁîµÇ¸é ¿¤¸®¸ÕÆ® Àç¹èÄ¡ $(window).on('resize', function(){ $this.responseHeight(); }); // Á¶È¸¹öÆ° $(document).on("click touchstart", "#search_btn", function(e){ $this.sendRequestSearch(); }); //ÀúÀå $(document).on("click touchstart", "#export_btn", function(e){ excelParse.handleFile(e, $this.excelParseCallback); }); // »ùÇôٿî $(document).on("click touchstart", "#excelDownload_btn", function(e){ $(this).attr("href", $this.defaultObj.sampleExcelFilePath); }); // ¸ð´Þ => ÀúÀå $(document).on("click touchstart", "#excelParseSave_btn", function(e){ $this.excelSaveHandler(); }); }, excelParseCallback : function( $resObj ){ // this = window var $this = this.control.buildList; var el = this.control.buildList.elementDefined; el.excelParseArea.html( $resObj.table ); el.excelParseModal.modal('show'); $this.excelJson = $resObj.json; }, excelSaveHandler: function(){ var $this = this; var ed = $this.elementDefined; var model = $this.model; var MAPID = $this.model.MAPID; /************************************************************************************************ * ¸Ê¾ÆÀ̵ð üũ ************************************************************************************************/ if( 0 > MAPID || null === MAPID ){ alert("¸ÊÀÌ »ý¼ºµÇÁö ¾Ê¾Ò½À´Ï´Ù!\n\n[ ¸ÞÀÎ > ¼öº¯¼³ºñ Singleline > ¸Ê Ãß°¡ ] ¸¦ ÅëÇÏ¿©\n\n¸ÊÀ» ¸ÕÀú »ý¼ºÇØ ÁÖ¼¼¿ä!"); } /************************************************************************************************ * ¼Ó¼º ÃʱâÈ ************************************************************************************************/ $this.init(); /************************************************************************************************ * ¿¢¼¿ json ÆĶó¸ÞÅÍ °¡°øÇϱâ ************************************************************************************************/ var src = $this.defaultObj.sampleExcelImgPath, ICONID = $this.defaultObj.sampleExcelICONID, w = $this.defaultObj.sampleExcelImgW, h = $this.defaultObj.sampleExcelImgH; var point = {}; var div = ""; //params var json = {}; json.Record = []; var sendToObj = {}; //console.log( $this.excelJson); $this.excelJson.forEach(function(item, index, array){ point = $this.defaultObj.autoGrid.getPoint(60, 20); //w, h var DESCR = item.TAGNAME; sendToObj = {}; sendToObj.MAPID = MAPID; sendToObj.POBJID = 0; sendToObj.TYPE = 1; // TYPE Á¾·ù : 0:unknown, 1:ICON, 2:TEXT, 3:HTML, 4:LINE sendToObj.DESCR = DESCR; sendToObj.TEXT = ''; sendToObj.ICONID = ICONID.substr( ICONID.indexOf("_") + 1 ); sendToObj.ICONX = point.x; sendToObj.ICONY = point.y; sendToObj.ICONSCALE = 1; sendToObj.ICONWAY = 0; sendToObj.ICONW = w; sendToObj.ICONH = h; sendToObj.ICONW2 = w; sendToObj.ICONH2 = h; sendToObj.ICONDEPTH = ""; // for by UNIQUE - API ¿¬»êÇÑ´Ù json.Record.push( sendToObj ); //json ¿ÀºêÁ§Æ®ÀÇ Record ¹è¿¿¡ sendToObj °´Ã¼¸¦ ³Ö´Â´Ù }); var xhrClass = new XhrClass(); var param = "mapapi=1&func=InsertMapObject&rqJobData="; param += JSON.stringify(json); // value to JSON xhrClass.sendRequest(model.JsonURL, param, complete, 'json', 'get'); function complete(xhr, res) { // ÀúÀå¿¡ ¼º°øÇϸé => $this.excelJson ¿¡ OBJID ³Ö¾îÁÖ°í => ȸ鿡 Ãâ·ÂÇÑ´Ù. if( 0 == res.ErrCode && 0 < res.Record.length ){ //console.log( res.Record ); res.Record.forEach(function(item, index, array){ $this.excelJson[index].OBJID = item.OBJID; $this.excelJson[index].COMPANY_ID = model.COMPANYID; }); // ¸Ê´Ù½Ã Àбâ model.MAPID = MAPID; model.init(); // szCurrentMode = view ¸ðµå µÈ´Ù $this.control.clickHandler.init( ed.dataView_btn ); //view ¹öÆ°ÀÌ ¾×ƼºêµÈ´Ù (ÃʱâÈ) $this.control.dataObjectDisplay_FEMS.start(); //INFO_FLAT_LIST ¿¡ ÀúÀå $this.insertINFO_FLAT_LIST(); }else{ alert("¿¡·¯ ["+res.ErrMsg+"] ¿¡·¯ÄÚµå ["+res.ErrCode+"]"); } //console.log( $this.excelJson ); } }, insertINFO_FLAT_LIST: function(){ var $this = this; var model = $this.model; //params var json = {}; json.Record = []; var sendToObj = {}; $this.excelJson.forEach(function(item, index, array){ sendToObj = {}; for(var key in item) { if( item.hasOwnProperty(key) ) sendToObj[key] = item[key]; } json.Record.push( sendToObj ); //json ¿ÀºêÁ§Æ®ÀÇ Record ¹è¿¿¡ sendToObj °´Ã¼¸¦ ³Ö´Â´Ù }); var xhrClass = new XhrClass(); var param = "Act=InsertINFO_FLAT_LIST&rqJobData="; param += JSON.stringify(json); // value to JSON xhrClass.sendRequest(model.jjheo_api, param, complete, 'json', 'get'); function complete(xhr, res) { // ÀúÀå¿¡ ¼º°øÇϸé => Å×ÀÌºí ´Ù½Ã Á¶È¸¿äûÇÑ´Ù. if( 0 == res.ErrCode ){ $this.elementDefined.excel_file_input.val(''); // ÆÄÀÏÀÇ ³»¿ëÀ» ¾÷·Îµå ¿Ï·á ÇßÀ¸¹Ç·Î ÃʱâÈ $this.sendRequestSearch(); }else{ console.warn( "[ "+$this.name+" ] ¿¡·¯ÄÚµå:" + res.ErrCode + " / ¿¡·¯¸Þ¼¼Áö:"+res.ErrMsg ); } } }, sendRequestSearch: function(){ var target_form = document.getElementById('SearchForm'); target_form.Export.value = '0'; target_form.json.value = '1'; target_form.id.value = $Config['Template']; // => api/FEMS.php ÆÄÀÏÀ» È£ÃâÇϱâ À§Çؼ target_form.mode.value = TableID; // menu_2_2.html ÀÇ php TableID (¿©±â¼´Â FLAT_MAP ) var url = this.model.JsonURL; var COMPANY_ID = this.model.COMPANYID; var _nGID = target_form.GID.value; var _nNODEID = target_form.NODEID.value; var SEARCH_FROM = ""; var SEARCH_TO = ""; var SEARCH_FROM = ""; var SrchWord = target_form.SrchWord.value; var _json_refresh_url = url+'?json=1&id=FEMS&mode='+TableID+'&GID='+_nGID+'&COMPANY_ID='+COMPANY_ID+'&NODEID='+_nNODEID+'&search_from='+SEARCH_FROM+'&search_to='+SEARCH_TO+'&SrchWord='+SrchWord+'&Export=0'; //console.log(_json_refresh_url); $('#'+TableID).load(_json_refresh_url); this.responseHeight(); }, responseHeight: function(){ var ed = this.elementDefined; var display_build_list = ed.display_build_list; var screenW=$(window).width(); var screenH=$(window).height(); var gap = screenH - $("#display_build_list").offset().top - 83; //$(".bDiv").css('height', gap + 'px'); //console.log(gap); //display_build_list.css('height', gap + 'px'); } }; })(); | cs |
* °í¿ë·®ÀÇ ¿¢¼¿ÆÄÀÏ - 6.6MB °¡ ÇÊ¿äÇÏ´Ù¸é ¾Æ·¡ÀÇ ¿¢¼¿À» ´Ù¿î·Îµå
- excel-parser : https://www.npmjs.com/package/excel-parser [º»¹®À¸·Î]
Ãâó: https://serpiko.tistory.com/636 [»ðSAP(Study And Programming) Áú ºí·Î±×. byÇãÁ¤Áø]