// ±¹Á¦½É»ç¿ø µ¥ÀÌÅÍ ¸ðµâ - ¿¢¼¿ ÆÄÀÏ ±â¹Ý // ÀÌ ¸ðµâÀº /base/excel/data.xlsx ÆÄÀÏÀ» Àо µ¥ÀÌÅ͸¦ Á¦°øÇÕ´Ï´Ù. let auditorData = []; // ¿¢¼¿ ÆÄÀÏÀ» Àо µ¥ÀÌÅ͸¦ ·ÎµåÇÏ´Â ÇÔ¼ö async function loadAuditorData() { try { // ¿¢¼¿ ÆÄÀÏ °æ·Î const excelPath = document.querySelector('script[src*="auditor/data.js"]') .src.replace('/inc/auditor/data.js', '/img/excel/data.xlsx'); // ¿¢¼¿ ÆÄÀÏ °¡Á®¿À±â const response = await fetch(excelPath); if (!response.ok) { throw new Error('¿¢¼¿ ÆÄÀÏÀ» ºÒ·¯¿Ã ¼ö ¾ø½À´Ï´Ù.'); } const arrayBuffer = await response.arrayBuffer(); // SheetJS¸¦ »ç¿ëÇÏ¿© ¿¢¼¿ ÆÄÀÏ Àбâ const workbook = XLSX.read(arrayBuffer, { type: 'array', cellDates: false, // ³¯Â¥ ¼¿ ó¸® ºñȰ¼ºÈ­ (¼öµ¿ ó¸®) raw: false, // Æ÷¸ËµÈ ÅØ½ºÆ® »ç¿ë codepage: 949 // ÇÑ±Û ÄÚµåÆäÀÌÁö (CP949) }); const firstSheetName = workbook.SheetNames[0]; const worksheet = workbook.Sheets[firstSheetName]; // ¿¢¼¿ µ¥ÀÌÅ͸¦ JSONÀ¸·Î º¯È¯ const jsonData = XLSX.utils.sheet_to_json(worksheet, { header: 1, raw: false, // Çü½ÄÈ­µÈ ÅØ½ºÆ® »ç¿ë defval: '' }); // Çì´õ Çà Á¦°ÅÇÏ°í µ¥ÀÌÅÍ ÆÄ½Ì auditorData = []; for (let i = 1; i < jsonData.length; i++) { const row = jsonData[i]; if (row && row.length >= 8 && row[0]) { // ÃÖ¼Ò 8°³ Ä÷³ÀÌ ÀÖ°í À̸§ÀÌ ÀÖ¾î¾ß ÇÔ // ³¯Â¥ Çü½Ä ó¸® ÇÔ¼ö const formatDate = (dateValue) => { if (!dateValue) return ''; // ÀÌ¹Ì ¹®ÀÚ¿­ Çü½ÄÀÎ °æ¿ì if (typeof dateValue === 'string') { // 2024.07.17 Çü½ÄÀÎÁö È®ÀÎ if (dateValue.match(/^\d{4}\.\d{2}\.\d{2}$/)) { return dateValue; } // 10.01.24 ¶Ç´Â 10/01/24 Çü½Ä (yy.mm.dd ¶Ç´Â dd.mm.yy) if (dateValue.match(/^\d{2}[\/.]\d{2}[\/.]\d{2}$/)) { const parts = dateValue.split(/[-\/.]/); // ù ¹øÂ° ºÎºÐÀÌ ¿ùÀÎÁö ÀÏÀÎÁö ÆÇ´Ü // 10.01.24 Çü½ÄÀÏ °æ¿ì ¿ù.ÀÏ.³âÀ¸·Î °¡Á¤ const month = parts[0]; const day = parts[1]; const year = '20' + parts[2]; // 2ÀÚ¸® ¿¬µµ¸¦ 4ÀÚ¸®·Î º¯È¯ return `${year}.${month.padStart(2, '0')}.${day.padStart(2, '0')}`; } // ´Ù¾çÇÑ Çü½ÄÀÇ ³¯Â¥¸¦ yyyy.mm.dd·Î º¯È¯ const parts = dateValue.split(/[-\/.]/); if (parts.length === 3) { // ¿¬µµ°¡ 4ÀÚ¸®ÀÎ °æ¿ì if (parts[0].length === 4) { const year = parts[0]; const month = parts[1].padStart(2, '0'); const day = parts[2].padStart(2, '0'); return `${year}.${month}.${day}`; } // ¿¬µµ°¡ 2ÀÚ¸®ÀÎ °æ¿ì (¸¶Áö¸· À§Ä¡) else if (parts[2].length === 2) { const month = parts[0].padStart(2, '0'); const day = parts[1].padStart(2, '0'); const year = '20' + parts[2]; return `${year}.${month}.${day}`; } } } // Date °´Ã¼ÀÎ °æ¿ì if (dateValue instanceof Date) { const year = dateValue.getFullYear(); const month = String(dateValue.getMonth() + 1).padStart(2, '0'); const day = String(dateValue.getDate()).padStart(2, '0'); return `${year}.${month}.${day}`; } // ¿¢¼¿ ½Ã¸®¾ó ³¯Â¥ÀÎ °æ¿ì (¼ýÀÚ) if (typeof dateValue === 'number') { const excelDate = new Date((dateValue - 25569) * 86400 * 1000); const year = excelDate.getFullYear(); const month = String(excelDate.getMonth() + 1).padStart(2, '0'); const day = String(excelDate.getDate()).padStart(2, '0'); return `${year}.${month}.${day}`; } return String(dateValue); }; // °¢ ¼¿ÀÇ °ªÀ» ó¸® auditorData.push({ name: String(row[0] || '').trim(), certNo: String(row[1] || '').trim(), standard: String(row[2] || '').trim(), grade: String(row[3] || '').trim(), registDate: formatDate(row[4]), renewalDate: formatDate(row[5]), expiryDate: formatDate(row[6]), status: String(row[7] || '').trim() }); } } } catch (error) { // ¿À·ù ¹ß»ý ½Ã ºó ¹è¿­ »ç¿ë auditorData = []; } } // ÆäÀÌÁö ·Îµå ½Ã ÀÚµ¿À¸·Î µ¥ÀÌÅÍ ·Îµå if (typeof XLSX !== 'undefined') { loadAuditorData(); } // µ¥ÀÌÅÍ Á¢±ÙÀ» À§ÇÑ ÇÔ¼ö (±âÁ¸ ÄÚµå¿ÍÀÇ È£È¯¼ºÀ» À§ÇØ) function getAuditorData() { return auditorData; } // ¿¢¼¿ ÆÄÀÏ ¾÷µ¥ÀÌÆ® ½Ã µ¥ÀÌÅÍ ¸®·Îµå function reloadData() { loadAuditorData(); }