如何使用exceljs按名称获取单元格?

Tra*_*Son 7 exceljs

现在,我必须像这样进行硬编码

var cell = worksheet.getCell('A1');
Run Code Online (Sandbox Code Playgroud)

但我想按名称定义我的单元格data,并通过以下方式访问单元格:

var cell = worksheet.getCell('data');
Run Code Online (Sandbox Code Playgroud)

一只忙碌的猫

我怎样才能用 exceljs 做到这一点? 非常感谢!

注意:解决我的问题的唯一解决方案似乎是添加列/行标题并定义键,但我不想在我的代码中这样做:

worksheet.columns = [
  { header: 'Id', key: 'id', width: 10 }
];
Run Code Online (Sandbox Code Playgroud)

Pan*_*khe 9

只是想建议另一种方式。我使用 console.table() 检查工作表中的列名和键。我没有为列名分配任何键。因此,我们迭代第一行并将 cell.text 分配给 key。

console.table(worksheet.columns);

worksheet.getRow(1).eachCell((cell, colNumber) => {
  worksheet.getColumn(colNumber).key = cell.text;
});

console.table(worksheet.columns);


worksheet.getRow(2).getCell("UserName").value;
Run Code Online (Sandbox Code Playgroud)


小智 5

据我所知,似乎没有内置方法。这是一个可以解决这个问题的函数:

function getCellByName(worksheet, name) {
    var match;
    worksheet.eachRow(function (row) {
        row.eachCell(function (cell) {
            for (var i = 0; i < cell.names.length; i++) {
                if (cell.names[i] === name) {
                    match = cell;
                    break;
                }
            }
        });
    });
    return match;
}
Run Code Online (Sandbox Code Playgroud)

使用 ES6:

const getCellByName = (worksheet, name) => {
    let match
    worksheet.eachRow(row => row.eachCell(cell => {
        if (cell.names.find(n => n === name)) {
            match = cell
        }
    }))
    return match
}
Run Code Online (Sandbox Code Playgroud)

对于非常大的工作表来说,这最终可能是不可行的,因为您必须迭代工作表中的每个非空单元格。

如果您正在寻找内置该功能的东西,我还没有尝试过,但xlsx-populate看起来很有希望。