export function export_json_to_excel({
multiHeader = [],
header,
data,
filename,
merges = ['A14:E14'],
autoWidth = true,
bookType = 'xlsx',
} = {}) {
filename = filename || 'excel-list'
data = [...data]
data.unshift(header)
for (let i = multiHeader.length - 1; i > -1; i--) {
data.unshift(multiHeader[i])
}
const ws_name = 'SheetJS'
const wb = new Workbook(),
ws = sheet_from_array_of_arrays(data)
if (merges.length > 0) {
if (!ws['!merges']) ws['!merges'] = []
merges.forEach((item) => {
ws['!merges'].push(XLSX.utils.decode_range(item))
})
}
// 设置合并单元格'A14:E14'的内容
ws['A14'] = {
t: 's',
v: '请严格按投放媒体选择对应的链接',
s: {
font: {
sz: 14,
bold: true,
},
alignment: {
horizontal: 'center',
vertical: 'center',
},
},
}
for (let i = 1; i < 5; i++) {
const cellAddress = String.fromCharCode(65 + i) + '14'
if (!ws[cellAddress]) {
ws[cellAddress] = { t: 's', v: '' }
}
ws[cellAddress].s = {
font: {
sz: 14,
bold: true,
},
alignment: {
horizontal: 'center',
vertical: 'center',
},
}
}
if (autoWidth) {
const colWidth = data.map((row) =>
row.map((val) => {
if (val === null) {
return {
wch: 10,
}
} else if (val.toString().charCodeAt(0) > 255) {
return {
wch: val.toString().length * 2,
}
} else {
return {
wch: val.toString().length,
}
}
})
)
const result = colWidth[0]
for (let i = 1; i < colWidth.length; i++) {
for (let j = 0; j < colWidth[i].length; j++) {
if (result[j]['wch'] < colWidth[i][j]['wch']) {
result[j]['wch'] = colWidth[i][j]['wch']
}
}
}
ws['!cols'] = result
}
wb.SheetNames.push(ws_name)
wb.Sheets[ws_name] = ws
const wbout = XLSX.write(wb, {
bookType: bookType,
bookSST: false,
type: 'binary',
})
saveAs(
new Blob([s2ab(wbout)], {
type: 'application/octet-stream',
}),
`${filename}.${bookType}`
)
}
这是导出excel的代码 使用vue+xlsxzu做的导出表格 但是合并单元格设置内容时 没效果 ,单元格倒是合并了 就算把内容设置不上去 这个代码没起作用
ws['A14'] = {
t: 's',
v: '请严格按投放媒体选择对应的链接',
s: {
font: {
sz: 14,
bold: true,
},
alignment: {
horizontal: 'center',
vertical: 'center',
},
},
}