You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

ExcelJS自动筛选后隐藏行图片未消失的技术问询

ExcelJS 4.4.0 导出带图片工作表,筛选时图片不随隐藏行消失的问题

使用ExcelJS 4.4.0 + Node.js导出含单元格图片的工作表,初始打开显示正常——每行D列都有对应图片。但开启AutoFilter隐藏部分行后,隐藏行的图片未消失,出现残留或错位。期望实现筛选时图片随单元格一同隐藏,尝试设置editAs: 'oneCell'无效。

最小复现代码

const ExcelJS = require('exceljs');

async function main() {
  const workbook = new ExcelJS.Workbook();
  const sheet = workbook.addWorksheet('test');

  sheet.columns = [
    { header: 'ID', key: 'id', width: 8 },
    { header: 'Name', key: 'name', width: 12 },
    { header: 'Category', key: 'category', width: 12 },
    { header: 'Image', key: 'image', width: 18 },
  ];

  sheet.autoFilter = 'A1:D1';

  const png = Buffer.from(
    'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==',
    'base64'
  );
  const imageId = workbook.addImage({ buffer: png, extension: 'png' });

  const rows = [
    [1, 'Alpha', 'A'],
    [2, 'Beta', 'B'],
    [3, 'Gamma', 'A'],
    [4, 'Delta', 'B'],
    [5, 'Epsilon', 'A'],
  ];

  for (const [id, name, category] of rows) {
    const row = sheet.addRow([id, name, category, '']);
    sheet.getRow(row.number).height = 40;

    sheet.addImage(imageId, {
      tl: { col: 3, row: row.number - 1 },
      ext: { width: 100, height: 50 },
      editAs: 'oneCell',
    });
  }

  await workbook.xlsx.writeFile('output.xlsx');
  console.log('Done: output.xlsx');
}

main();

复现步骤

  • 执行命令:npm init -y && npm install exceljs@4.4.0
  • 将上述代码保存为generate.js,运行node generate.js
  • 在WPS 12.1.25897(macOS)中打开生成的output.xlsx
  • 对“Category”列(C列)进行筛选,取消勾选“A”
  • 此时1/3/5行被隐藏,但第5行(分类A)的图片仍显示在最后可见行下方,正常应仅显示2、4行的图片

环境配置

  • ExcelJS 4.4.0
  • Node 20.x
  • macOS 15
  • WPS Office 12.1.25897

疑问

  1. ExcelJS是否真正支持“单元格内图片”嵌入功能?
  2. 若不支持,是否存在适配AutoFilter的addImage配置方案(如oneCelltwoCell对比、tl/brext参数选择等)?

内容的提问来源于stack exchange,提问作者jinglan0379

火山引擎 最新活动