我试图从nodejs中的excel中获取给定列的数据(例如,“电子邮件”列),处理数据,然后将结果导出到同一个excel中名为“电子邮件”的新列中-结果”。
这是我尝试获取数据的方法:
const xlsx = require('xlsx');
const emails = [];
var workbook = xlsx.readFile(`./view/assets/uploads/${filename}`);
var first_sheet_name = workbook.SheetNames[0];
var address_of_cell = 'Emails';
var worksheet = workbook.Sheets[first_sheet_name];
var desired_cell = worksheet[address_of_cell];
emails.push(desired_cell.v);
console.log(emails);
但我收到此错误:
TypeError: Cannot read property 'v' of undefined
因此无法检索数据。
另外,如何创建一个新列(如果不存在)并将结果添加到其中?
请问有什么想法吗?
最佳答案
您不能只传递字符串并期望获得该列,您必须找到将累积的单元格的名称。
const columnName = Object.keys(worksheet).find(key=> worksheet[key].v === address_of_cell);
通过传递“电子邮件”并搜索要解析的单元格名称来查找名称。
这会起作用:
const xlsx = require('xlsx');
const emails = [];
var workbook = xlsx.readFile(`./view/assets/uploads/${filename}`);
var first_sheet_name = workbook.SheetNames[0];
var address_of_cell = 'Emails';
var worksheet = workbook.Sheets[first_sheet_name];
const columnName = Object.keys(worksheet).find(key=> worksheet[key].v === address_of_cell);
for (let key in worksheet) {
if (key.toString()[0] === columnName[0]) {
emails.push(worksheet[key].v);
}
}
console.log('Result list', emails)
同样,您可以保持功能并避免数组声明和工作表对象引用,而不是 for in 循环
const emails = Object.entries(worksheet)
.filter(([key, value]) => key.toString()[0] === columnName[0])
.map(([key, value]) => value.v)
关于javascript - 如何从 Excel 中读取 A 列数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64592542/