我制作了一个工作表,每行都有一个图像。当我过滤或删除一行时,该行的图像仍然存在。 在 v4.4.0 / v4.3.0 上测试
我尝试了不同的添加图像的方法,但它们都不起作用,我的第一个假设可能是因为没有功能可以放置在单元格中
我怀疑可能存在问题,或者我可能会以不同的方式处理它。 任何帮助将不胜感激。
const workbook = new ExcelJS.Workbook()
const worksheet = workbook.addWorksheet('test')
worksheet.autoFilter = 'A1:D1'
worksheet.views = [{ state: 'frozen', xSplit: 0, ySplit: 1, topLeftCell: 'A2', activeCell: 'A2' }]
worksheet.columns = [
{ header: 'column 1', key: 'col1' },
{ header: 'column 2', key: 'col2' },
{ header: 'column 3', key: 'col3' },
{ header: 'column 4', key: 'col4' },
]
const buffer = Deno.readFileSync('assets/logo.png')
for (let i = 0; i <= 3; i++) {
const row = worksheet.addRow([i + 1, i + 2, i + 3, ''])
const imageId = workbook.addImage({
buffer,
extension: 'png',
})
const imageHeight = 50
const rowHeight = Math.floor(imageHeight * 0.75)
worksheet.getRow(row.number).height = rowHeight
worksheet.addImage(imageId, {
tl: { col: 3, row: row.number - 1 },
ext: { width: 100, height: imageHeight },
editAs: undefined, // tested also with 'oneCell'
})
}
return await workbook.xlsx.writeBuffer()
这就是结果
删除一行后
将正常运行的文件与 exceljs 生成的文件进行比较后,我发现 XML 中存在一些差异。有了这个解决方法,它现在对我有用。如果有时间,我会尝试将其作为拉取请求提交。
目前该库不支持twoCell,但是,下面的代码可能是一个hack,所以如果你能够绕过它,它将按预期运行。
worksheet.addImage(imageId, {
tl: {
col: 1,
row: row.number - 1,
nativeCol: 1,
nativeColOff: 36000,
nativeRow: row.number - 1,
nativeRowOff: 36000,
},
br: {
col: 1,
row: row.number - 1,
nativeCol: 1,
nativeColOff: 1332000,
nativeRow: row.number - 1,
nativeRowOff: 504000,
},
editAs: "twoCell",
});