安装
npm install xlsx-js-style --save
使用
- 引入
import XLSX from 'xlsx-js-style'
// 最好是定义一个表个通用数据,循环得到相关数据
const tableHeader = [
{name: 'a', value: 'clo1',width:100},
{name: 'b', value: 'clo2',width:80},
],
// 1.创建一个工作簿
const wb = XLSX.utils.book_new()
// 表格标题
// 这里设置标题是怕数据没有,返回空表,连标题都没有
// 这里的权重,没有数据tableData里的高,果如tableData中没有和标题一一对应,导出的表格也会展示
// 比如:arrHeader = [a,b] 而,tableData = [{a:1,b:2,c:3}];那么表格会多一个c的列
const arrHeader = [a,b] //arrHeader 1维数组,表格标题
// 创建表格数据
const tableData = [{a:1,b:2},{a:1,b:2}]
// 2.创建sheet对象
const ws = XLSX.utils.json_to_sheet(tableData,
{
header: arrHeader
}
)
// 设置每个列宽度,有多少个,就需要添加多少
ws['!cols'] = [
{
wpx: 100
},
{
wpx: 100
}
]
// 上面有多个比较麻烦,最好是从tableHeader获取
// 根据标题设置宽度
const tableCols = tableHeader.map(item => {
return {
wpx: item?.width ?? 100 // 如果没有找到,设置默认为100
}
})
// 在赋值给 ws['!cols']
ws['!cols'] = tableCols.splice(1)
// 设置表格样式
for (const i in ws) {
if (!['!ref', '!merges', '!cols'].includes(i)) {
ws[i].s = {
border: {
top: { style: 'thin' },
bottom: { style: 'thin' },
left: { style: 'thin' },
right: { style: 'thin' }
},
font: {
sz: 9
},
// 内容居中
alignment: {
horizontal: 'center',
vertical: 'center',
wrap_text: true
}
}
// 判断,标题加粗,标题只有1行,大于1则不加粗
const regex = /\d+/g
if (!(i.match(regex)[0] > 1)) {
ws[i].s = {
border: {
top: { style: 'thin' },
bottom: { style: 'thin' },
left: { style: 'thin' },
right: { style: 'thin' }
},
// 内容居中
alignment: {
horizontal: 'center',
vertical: 'center',
wrap_text: true
},
font: {
sz: 9,
bold: true,
color: {
rgb: '000000' // 十六进制,不带#
}
},
fill: {
fgColor: { rgb: 'ECF5FF' } // 填充颜色
}
}
}
}
}
// 3.将 sheet 对象插入工作簿,sheetName为名称
XLSX.utils.book_append_sheet(wb, ws, 'sheetName')
// 4.下载 excel
XLSX.writeFile(wb, `导出表格.xlsx`)
-
-
-