UNPKG

wsemi

Version:

A support package for web developer.

102 lines (83 loc) 2.58 kB
import get from 'lodash/get' import isestr from './isestr.mjs' import isarr from './isarr.mjs' import iseobj from './iseobj.mjs' import isEle from './isEle.mjs' import downloadFileFromBlob from './downloadFileFromBlob.mjs' import getExcelWorkbookFromData from './getExcelWorkbookFromData.mjs' import ltdtkeysheads2mat from './ltdtkeysheads2mat.mjs' import isWindow from './isWindow.mjs' import getXLSX from './_getXLSX.mjs' /** * 下載資料成為Excel檔案,前後端都可用 * * Unit Test: {@link https://github.com/yuda-lyu/wsemi/blob/master/test/downloadExcelFileFromData.test.mjs Github} * @memberOf wsemi * @param {String} fileName 輸入檔名字串 * @param {String} [sheetName='data'] 輸入分頁(sheet)名稱字串,預設為'data' * @param {Array|Element} data 輸入內容陣列或是DOM的table元素(Element),內容陣列可為二維陣列(mat)或由物件組成的一維陣列(ltdt) * @example * * let data * * data = [ * ['a', 'b', 'c'], * [1, 23.45, 'xyz'] * ] * downloadExcelFileFromData('data(mat).xlsx', 'data', data) * * data = [ * { x: 'a', y: 'b', z: 'c' }, * { x: 1, y: 23.45, zzz: 'xyz' }, * ] * downloadExcelFileFromData('data(ltdt).xlsx', 'data', data) * */ function downloadExcelFileFromData(fileName, sheetName = 'data', data) { //check if (!isestr(fileName)) { let msg = 'no filename' console.log(msg, fileName) return { error: msg } } if (!isestr(sheetName)) { sheetName = 'data' } if (!isarr(data) && !isEle(data)) { let msg = 'data is not an array or element' console.log(msg, data) return { error: msg, } } //check ltdt //ltdtkeysheads2mat if (isarr(data) && iseobj(get(data, 0, null))) { //ltdtkeysheads2mat data = ltdtkeysheads2mat(data) } //getExcelWorkbookFromData let wb = getExcelWorkbookFromData(data, sheetName) //check if (get(wb, 'error')) { console.log(wb.error) return wb.error } //xlutls let xl = getXLSX() //check if (isWindow()) { //wbout let wbout = xl.write(wb, { bookType: 'xlsx', bookSST: false, type: 'array' }) //downloadFileFromBlob downloadFileFromBlob(fileName, new Blob([wbout])) } else { //writeFile xl.writeFile(wb, fileName) } return 'ok' } export default downloadExcelFileFromData