|
|
|
|
|
|
|
|
|
self.importScripts('https://cdn.jsdelivr.net/npm/exceljs@4.4.0/dist/exceljs.min.js'); |
|
|
|
self.onmessage = async (e)=>{ |
|
const { type, buffer } = e.data || {}; |
|
if (type !== 'parse' || !buffer) return; |
|
|
|
try { |
|
const wb = new ExcelJS.Workbook(); |
|
await wb.xlsx.load(new Uint8Array(buffer)); |
|
const ws = wb.worksheets[0]; |
|
if (!ws) { self.postMessage({ type:'parsed', payload:{ rows:[], cols:[] } }); return; } |
|
|
|
const rows = []; |
|
ws.eachRow({ includeEmpty:false }, (row, idx)=>{ |
|
if (idx === 1) return; |
|
const obj = {}; |
|
row.eachCell({ includeEmpty:true }, (cell, cIdx)=>{ |
|
const letter = ws.getColumn(cIdx).letter || String.fromCharCode(64 + cIdx); |
|
const v = cell?.value; |
|
obj[letter] = (v && typeof v === 'object' && v.text != null) ? v.text : (v ?? ''); |
|
}); |
|
if (Object.values(obj).some(v => v != null && String(v).trim() !== '')) rows.push(obj); |
|
}); |
|
|
|
const colSet = new Set(); rows.forEach(r => Object.keys(r).forEach(k => colSet.add(k))); |
|
self.postMessage({ type:'parsed', payload:{ rows, cols:[...colSet] } }); |
|
} catch (err) { |
|
self.postMessage({ type:'error', error: 'ูุดู ุชุญู
ูู ุงูู
ูู: ' + (err?.message || err) }); |
|
} |
|
}; |
|
|