首页 > 解决方案 > 读取 xlsx 文件并搜索特定值

问题描述

我需要在 A 列的 xlsx 中搜索一个值并返回其他列中的值 [BG]

我有一个读取 xlsx 的函数:

用户数据.js

function personData (){

    let XLSX = require('xlsx')
    let workbook = XLSX.readFile(`${__dirname}/\person.xlsx`);
    let sheet_name_list = workbook.SheetNames;
    let xlData = XLSX.utils.sheet_to_json(workbook.Sheets[sheet_name_list[0]]);
    return xlData
}
module.exports = personData;

并通过以下方式返回数据

  {
    编号:0,
    name: 'Bob', //我需要搜索这个属性并返回所有其他的
    全名:'罗伯特肖恩',
    号码:123456789,
    团队:“它”,
    个人资料:'所有',
    文件:5672,
    电子邮件:'robsh@gmail.com'
  },
  {
    编号:1,
    名称:'让',
    full_name: '玛丽珍',
    号码:987654321,
    团队:“人力资源”,
    个人资料:'销售',
    文件:1285,
    电子邮件:'mjean@gmail.com'
  }
]

现在我需要在该结果中搜索一个值并返回其他信息,例如:

用户.js

const usersData = require ('./userData')
let valueToSearch = 'Bob' //search for that value inside the name attribute

let personData = usersData(valueToSearch)
console.log(personData); //return Bob's data

谢谢!

标签: javascriptnode.jsxlsx

解决方案


鉴于 中已存在数据userData,您可以使用来查找具有匹配名称Array.find()的对象 ( )。row

userData.find(o => o.name === valueToSearch);

如果找到这样的对象,您可以通过 提取其属性名称Object.keys(),过滤掉不需要的属性并提取相关值,如下所示。

Object.keys(row)
  .filter(k => k !== 'id' && k !== 'name')
  .map(k => row[k])
  .join(', ');

请查看下面的可运行代码片段。

const userData = [{
    id: 0,
    name: 'Bob', //I need to search for this attribute and return all others
    full_name: 'Robert Shawn',
    number: 123456789,
    team: 'IT',
    profile: 'ALL',
    file: 5672,
    email: 'robsh@gmail.com'
  },
  {
    id: 1,
    name: 'Jean',
    full_name: 'Mary Jean',
    number: 987654321,
    team: 'HR',
    profile: 'Sales',
    file: 1285,
    email: 'mjean@gmail.com'
  }
];
const valueToSearch = 'Bob';

const row = userData.find(o => o.name === valueToSearch);
if (row) {
  const values = Object.keys(row)
  .filter(k => k !== 'id' && k !== 'name')
  .map(k => row[k])
  .join(', ');
  console.log('found: ' + values)
} else {
  console.log('not found');
}


推荐阅读