Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从Excel中读取列A中的数据_Javascript_Node.js_Excel - Fatal编程技术网

Javascript 如何从Excel中读取列A中的数据

Javascript 如何从Excel中读取列A中的数据,javascript,node.js,excel,Javascript,Node.js,Excel,我试图从nodejs中的excel中获取给定列的数据(例如,列“Emails”),处理数据,然后将结果导出到同一个excel中,新的列名为“Emails result” 这就是我通过获取数据所尝试的: const xlsx = require('xlsx'); const emails = []; var workbook = xlsx.readFile(`./view/assets/uploads/${filename}`);

我试图从nodejs中的excel中获取给定列的数据(例如,列“Emails”),处理数据,然后将结果导出到同一个excel中,新的列名为“Emails result”

这就是我通过获取数据所尝试的:

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(工作表).find(key=>工作表[key].v==单元格的地址)

通过传递“电子邮件”并搜索要解析的单元格名称来查找名称

这将有助于:

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)

仔细检查你的专栏邮件是否存在,可能是你拼错了,错误是找不到这样的单元格是的,该专栏存在并且拼写正确。应该还有其他errorconsole.log(所需的_单元格)并查看输出中的“未定义”内容