UNPKG

@sparta-utils/excel-validate-helper

Version:

Excel 读取、校验、错误标注和导出工具库

71 lines (70 loc) 3.06 kB
export class ExcelExporter { /** * 导出文件,支持xlsx/csv/pdf,返回 Promise */ static export(blob, options = {}) { return new Promise((resolve, reject) => { var _a; const { fileName = 'export.xlsx', format = 'xlsx', onSuccess, onError, onProgress } = options; // 环境检查 if (typeof window === 'undefined' || typeof document === 'undefined') { const err = new Error('ExcelExporter.export 必须在浏览器环境中调用'); onError === null || onError === void 0 ? void 0 : onError(err); reject(err); return; } // 参数校验 if (!(blob instanceof Blob)) { const err = new TypeError('参数 blob 必须是 Blob 类型'); onError === null || onError === void 0 ? void 0 : onError(err); reject(err); return; } // 根据格式自动判断默认文件名和 MIME 类型(部分示例) const ext = fileName.includes('.') ? (_a = fileName.split('.').pop()) === null || _a === void 0 ? void 0 : _a.toLowerCase() : ''; const expectedExt = format; let finalFileName = fileName; if (ext !== expectedExt) { finalFileName = fileName.replace(/(\.[^.]+)?$/, `.${expectedExt}`); } // IE 特殊处理 if (window.navigator && window.navigator.msSaveOrOpenBlob) { try { ; window.navigator.msSaveOrOpenBlob(blob, finalFileName); onSuccess === null || onSuccess === void 0 ? void 0 : onSuccess(); resolve(); } catch (error) { onError === null || onError === void 0 ? void 0 : onError(error); reject(error); } return; } // 这里可以预留onProgress,实际blob导出多是瞬时完成,如需大文件导出,需要自行实现分片上传等机制 onProgress === null || onProgress === void 0 ? void 0 : onProgress(0); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.style.display = 'none'; a.href = url; a.download = finalFileName; document.body.appendChild(a); try { a.click(); onProgress === null || onProgress === void 0 ? void 0 : onProgress(100); onSuccess === null || onSuccess === void 0 ? void 0 : onSuccess(); resolve(); } catch (error) { onError === null || onError === void 0 ? void 0 : onError(error); reject(error); } finally { document.body.removeChild(a); URL.revokeObjectURL(url); } }); } }