依赖的npm包:
- exceljs 导出数据到excel表中
- node-fetch 在nodejs端发送http请求
封装一个工具函数
/**
* 插入图片到excel
* @param {object} wb 工作簿
* @param {object} ws 工作表
* @param {array} data 数据
* @param {number} col excel表图片列的索引
* @param {object} ext 额外描述
* @param {string} fieldName 数据中图片的键名
*/
async function insertImg2excel({ wb, ws, data, col, ext, fieldName }) {
const promises = data.map(async (d, i) => {
const url = d[ fieldName ]
if (!url) {
return
}
const ret = await fetch(url)
const bufferData = await ret.arrayBuffer()
const imgId = wb.addImage({
buffer: Buffer.from(bufferData),
extension: 'png'
})
// ws.addImage(imgId, {
// tl: { col, row: i + 1 },
// ext
// })
ws.addImage(imgId, {
tl: { col: col, row: i + 1 }, // top left
br: { col: col + 1, row: i + 2 } // bot right
})
})
await Promise.all(promises)
}
使用示例:
const wb = new Excel.Workbook()
const ws = wb.addWorksheet('sheet_name')
ws.columns = [
{
header: '姓名',
key: 'name',
},
{
header: '照片',
key: 'img',
},
]
const data = [
{
name: 'jzx',
img: 'xxxx.png'
}
]
ws.addRows(data)
await insertImg2excel({
wb,
ws,
data,
col: 1,
fieldName: 'img',
// ext: {
// width: 60,
// height: 60
// }
})
如果你是直接插入本地图片,请参考exceljs
的文档。