qp-es-ui
Version:
Query Park UI Components for React
65 lines (59 loc) • 2.81 kB
JavaScript
const dataToExcel = async (data) => {
// console.log('HERE')
let success = false
var uri = 'data:application/vnd.ms-excel;base64,'
var tmplWorkbookXML = '<?xml version="1.0"?><?mso-application progid="Excel.Sheet"?><Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">' +
'<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office"><Author>Axel Richter</Author><Created>{created}</Created></DocumentProperties>' +
'<Styles>' +
'<Style ss:ID="Currency"><NumberFormat ss:Format="Currency"></NumberFormat></Style>' +
'<Style ss:ID="Date"><NumberFormat ss:Format="Medium Date"></NumberFormat></Style>' +
'</Styles>' +
'{worksheets}</Workbook>'
var tmplWorksheetXML = '<Worksheet ss:Name="{nameWS}"><Table>{rows}</Table></Worksheet>'
var tmplCellXML = '<Cell{attributeStyleID}{attributeFormula}><Data ss:Type="{nameType}">{data}</Data></Cell>'
var base64 = function (s) { return window.btoa(unescape(encodeURIComponent(s))) }
var format = function (s, c) { return s.replace(/{(\w+)}/g, function (m, p) { return c[p] }) }
var ctx = ''
var workbookXML = ''
var worksheetsXML = ''
var rowsXML = ''
for (let i = 0; i < data.length; i++) {
// if (!tables[i].nodeType) tables[i] = document.getElementById(tables[i]);
for (var j = 0; j < data[i].value.length; j++) {
rowsXML += '<Row>'
for (let k in data[i].value[j]) {
// var dataType = tables[i].rows[j].cells[k].getAttribute("data-type");
// var dataStyle = tables[i].rows[j].cells[k].getAttribute("data-style");
// var dataValue = tables[i].rows[j].cells[k].getAttribute("data-value");
let dataValue = data[i].value[j][k]
// var dataFormula = tables[i].rows[j].cells[k].getAttribute("data-formula");
// dataFormula = (dataFormula)?dataFormula:(appname=='Calc' && dataType=='DateTime')?dataValue:null;
ctx = { attributeStyleID: '',
nameType: 'String',
data: dataValue,
attributeFormula: ''
}
rowsXML += format(tmplCellXML, ctx)
}
rowsXML += '</Row>'
}
ctx = { rows: rowsXML, nameWS: data[i].key }
worksheetsXML += format(tmplWorksheetXML, ctx)
rowsXML = ''
}
ctx = { created: (new Date()).getTime(), worksheets: worksheetsXML }
workbookXML = format(tmplWorkbookXML, ctx)
// console.log(workbookXML);
var link = document.createElement('A')
link.href = uri + base64(workbookXML)
link.download = 'querypark.xls'
link.target = '_blank'
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
if (link) {
success = true
return success
}
}
export default dataToExcel