UNPKG

@asasugar-use/custom-json2excel

Version:

✌传入json,可自定义表格标题名称和列数、头部名称、过滤列和绑定生成开始与成功的回调函数

1 lines 9.01 kB
"use strict";let __rslib_import_meta_url__="undefined"==typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_require__={};__webpack_require__.d=function(e,t){for(var r in t)__webpack_require__.o(t,r)&&!__webpack_require__.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},__webpack_require__.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},__webpack_require__.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{JsonToExcel:()=>JsonToExcel,excelToJson:()=>excelToJson});let is_toString=Object.prototype.toString;function is(e,t){return is_toString.call(e)===`[object ${t}]`}function isDef(e){return void 0!==e}function isUnDef(e){return!isDef(e)}function isObject(e){return null!==e&&is(e,"Object")}function isEmpty(e){return isArray(e)||isString(e)?0===e.length:e instanceof Map||e instanceof Set?0===e.size:!!isObject(e)&&0===Object.keys(e).length}function isDate(e){return is(e,"Date")}function isNull(e){return null===e}function isNullAndUnDef(e){return isUnDef(e)&&isNull(e)}function isNullOrUnDef(e){return isUnDef(e)||isNull(e)}function isNumber(e){return is(e,"Number")}function isPromise(e){return is(e,"Promise")&&isObject(e)&&isFunction(e.then)&&isFunction(e.catch)}function isString(e){return is(e,"String")}function isFunction(e){return"function"==typeof e}function isBoolean(e){return is(e,"Boolean")}function isRegExp(e){return is(e,"RegExp")}function isArray(e){return e&&Array.isArray(e)}function isWindow(e){return"undefined"!=typeof window&&is(e,"Window")}function isElement(e){return isObject(e)&&!!e.tagName}function isMap(e){return is(e,"Map")}let isServer=null,isClient=null;function isUrl(e){return/(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+(?::\d+)?|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)$/.test(e)}function isValidMap(e){return isArray(e)||isObject(e)}function isJsonStr(e){if(isString(e))try{let t=JSON.parse(e);if(t&&isObject(t))return!0;return!1}catch(t){return console.log("error:"+e+"!!!"+t),!1}}function isBase64(e){return!!e&&/^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$/.test(e)}let external_xlsx_namespaceObject=require("xlsx"),external_papaparse_namespaceObject=require("papaparse");function getHeaderRow(e){if(!e||!e["!ref"])return[];let t=[],r=external_xlsx_namespaceObject.utils.decode_range(e["!ref"]),n=r.s.r;for(let o=r.s.c;o<=r.e.c;++o){let r=e[external_xlsx_namespaceObject.utils.encode_cell({c:o,r:n})],s="UNKNOWN "+o;r&&r.t&&(s=external_xlsx_namespaceObject.utils.format_cell(r)),t.push(s)}return t}function getExcelData(e){let t=[];for(let r of e.SheetNames){let n=e.Sheets[r],o=getHeaderRow(n),s=external_xlsx_namespaceObject.utils.sheet_to_json(n,{raw:!0});t.push({header:o,results:s,meta:{sheetName:r}})}return t}function getCsvData(e){let t=e.meta.fields??[],r=e.data.filter(e=>Object.keys(e).length===t.length);return[{header:t,results:r,meta:{sheetName:"Sheet1"}}]}function readerData(e){return new Promise((t,r)=>{e instanceof File||r(Error("RawFile must be file"));let n=new FileReader;"application/vnd.ms-excel"===e.type||"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"===e.type?(n.onload=async e=>{try{let n=e.target?.result;n||r(Error("No data"));let o=(0,external_xlsx_namespaceObject.read)(n,{type:"array",cellDates:!0}),s=getExcelData(o);t(s)}catch(e){r(e)}},n.readAsArrayBuffer(e)):"text/csv"===e.type&&(n.onload=async e=>{try{let n=e.target?.result;n||r(Error("No data")),"string"!=typeof n&&r(Error("Invalid data type"));let o=(0,external_papaparse_namespaceObject.parse)(n,{header:!0}),s=getCsvData(o);t(s)}catch(e){r(e)}},n.readAsText(e))})}function base64ToBlob(e,t){try{if("string"!=typeof e)throw Error("Input data must be a string");let r=window.btoa(e),n=r.length,o=new Uint8Array(n);for(let e=0;e<n;e++)o[e]=r.charCodeAt(e);return new Blob([o],{type:t})}catch(e){throw console.error("Error converting Base64 to Blob:",e),e}}function stringToBlob(e,t){try{if("string"!=typeof e)throw Error("Input data must be a string");let r=new TextEncoder().encode(e);return new Blob([r],{type:t})}catch(e){throw console.error("Error converting string to Blob:",e),e}}class JsonToExcel{data;scope;orderedKey;filters;title;footer;keyMap;name;type;onStart;onSuccess;onError;constructor({data:e=[],scope:t={},orderedKey:r=[],filters:n=[],title:o=[],footer:s=[],keyMap:i={},name:a="excel",type:l="xls",onStart:c=()=>{},onSuccess:_=()=>{},onError:u=e=>{console.log(e)}}){this.data=e,this.scope=t,this.filters=n,this.footer=s,this.orderedKey=r,this.keyMap=i,this.name=a,this.title=o,this.type=l,this.onStart=c,this.onSuccess=_,this.onError=u}generate(){if(!this.data||!this.data.length){this.onError&&this.onError();return}this.onStart&&this.onStart();let e=this._getProcessedJson(this.data);return(e=this._toChsKeys(e),"csv"==this.type)?this._export(this._jsonToCSV(e),`${this.name}.${this.type}`,"application/csv"):this._export(this._jsonToXLS(e),`${this.name}.${this.type}`,"application/vnd.ms-excel")}_getObjLastValue(e,t){if(isObject(t)){let r=Object.keys(t)[0],n=Object.values(t)[0];return this._getObjLastValue(e[r],n)}return e[t]}_toChsKeys(e){return e.map(e=>{let t={};if(this.orderedKey&&this.orderedKey.length)for(let r of this.orderedKey)t[r]=e[r];if(this.filters&&this.filters.length)for(let e of this.filters)delete t[e];if(this.scope&&Object.keys(this.scope).length){let r=Object.keys(t).length?t:e;for(let e in r)this.scope.hasOwnProperty(e)?t[e]=this._getObjLastValue(r[e],this.scope[e]):t[e]=r[e]}if(this.keyMap&&Object.keys(this.keyMap).length){let r=Object.keys(t).length?t:e;for(let e in r)this.keyMap.hasOwnProperty(e)&&(t[this.keyMap[e]]=r[e],delete r[e])}return Object.keys(t).length?t:e})}_download(e,t){if(window.navigator&&window.navigator.msSaveOrOpenBlob)window.navigator.msSaveOrOpenBlob(e,t);else{let r=document.createElement("a"),n=window.URL.createObjectURL(e);r.href=n,r.setAttribute("download",t),r.innerHTML="downloading...",r.style.display="none",document.body.appendChild(r),setTimeout(()=>{r.click(),document.body.removeChild(r),setTimeout(()=>{self.URL.revokeObjectURL(r.href)},250)},66)}}_export(e,t,r){new Promise(n=>{let o;o=isBase64(e)?base64ToBlob(e,r):stringToBlob(e,r),n(this._download(o,t))}).then(()=>{this.onSuccess&&this.onSuccess()}).catch(e=>{this.onError&&this.onError(e)})}_jsonToXLS(e){let t="<thead><tr>";if(this.title&&this.title.length){for(let e of this.title)t+=`<th colspan=${e.colspan}>${e.name}`;t+="<th></tr>"}for(let r in e[0])t+="<th>"+r+"</th>";if(t+="</tr></thead><tbody>",e.map(e=>{for(let r in t+="<tbody><tr>",e)t+=`<td>${e[r]}</td>`;t+="</tr></tbody>"}),this.footer&&this.footer.length){for(let e of(t+="<tfooter><tr>",this.footer))t+=`<th colspan=${e.colspan}>${e.name}`;t+="<th></tr></tr></tfooter>"}return'<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><meta name=ProgId content=Excel.Sheet> <meta name=Generator content="Microsoft Excel 11"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\x3c!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--\x3e<style type="text/css">td{mso-number-format:@;}</style></head><body><table>${table}</table></body></html>'.replace("${table}",t)}_jsonToCSV(e){var t="";if(this.title&&this.title.length){for(let e of this.title)t+=`${e.name}`;t+="\r\n"}for(let r in e[0])t+=r+",";if(t=t.slice(0,t.length-1)+"\r\n",e.map(e=>{for(let r in e){let n=e[r]+"";n.match(/[,"\n]/)&&(n='"'+n.replace(/\"/g,'""')+'"'),t+=n+","}t=t.slice(0,t.length-1)+"\r\n"}),this.footer&&this.footer.length){for(let e of this.footer)t+=`${e.name}`;t+="\r\n"}return t}_getProcessedJson(e){let t=this._getKeys(e),r=[];return e.map(e=>{let n={};for(let r in t){let o=t[r];n[r]=this._getNestedData(o,e)}r.push(n)}),r}_getKeys(e){let t={};for(let r in e[0])t[r]=r;return t}_getNestedData(e,t){let r=isObject(e)?e.field:e,n=null,o=`${r}`.split(".");n=t[o[0]];for(let e=1;e<o.length;e++)n=n[o[e]];return isNullOrUnDef(n=this._callItemCallback(e,n))?"":n}_callItemCallback(e,t){return isObject(e)&&isFunction(e.callback)?e.callback(t):t}}async function excelToJson(e){return await readerData(e)}var __webpack_export_target__=exports;for(var __webpack_i__ in __webpack_exports__)__webpack_export_target__[__webpack_i__]=__webpack_exports__[__webpack_i__];__webpack_exports__.__esModule&&Object.defineProperty(__webpack_export_target__,"__esModule",{value:!0});