删除并过滤出exceljs中包含图像的行

问题描述 投票:0回答:1

我制作了一个工作表,每行都有一个图像。当我过滤或删除一行时,该行的图像仍然存在。 在 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()

这就是结果

enter image description here

删除一行后

enter image description here

javascript node.js exceljs
1个回答
0
投票

将正常运行的文件与 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",  
  });

https://github.com/exceljs/exceljs/discussions/2648

© www.soinside.com 2019 - 2024. All rights reserved.