如何设置nodeJS以从电子表格中提取数据

时间:2017-03-15 19:35:19

标签: javascript node.js excel npm

我尝试开发一个节点JS脚本,从电子表格中提取数据以在脚本中使用。

我的脚本开头是这样的:

var webdriverio = require('webdriverio');
var Excel = require('exceljs');
var testData = require('xlsx-extract');
//var Excel = require ('xlsx-style')
var options = {
    desiredCapabilities: {
        //browserName: 'phantomjs'
        browserName: 'chrome'
    }
};

var count = (1);
var testDate = new Date();
var Login = ('#button.mb24.secondary.wide')
var workbook = new Excel.Workbook();
workbook.xlsx.readFile('Myspreadsheet_v1.xlsx')
    .then(function() {
        getCell('A2').value
        console.log('url is: ' + getCell('A2').value);
    });

//var workbook = new Excel.Workbook();
//stream.pipe(workbook.xlsx.createInputStream('./Myspreadsheet_v1.xlsx'));

var worksheet = workbook.getWorksheet(1);
var sfurl = worksheet.getCell('A2').value;
var loginName = worksheet.getCell('B2').value;
var loginPassword = worksheet.getCell('C2').value;

但是,当我尝试运行它时出现错误:

xxxxxxx/xxxxxxx/xxxxx.js:32
var sfurl = worksheet.getCell('A2').value;
                     ^

TypeError: Cannot read property 'getCell' of undefined
    at Object.<anonymous> (xxxxxxx/xxxxxxx/xxxxx.js:32:22)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Module.runMain (module.js:604:10)
    at run (bootstrap_node.js:394:7)
    at startup (bootstrap_node.js:149:9)
    at bootstrap_node.js:509:3

我真的不知道我做错了什么以及如何解决它。 我已经停止了npn,我也安装了node-xlxs和node-exceljs。 我在我的系统上安装了nodeJS。

我使用这些链接尝试开始: https://www.npmjs.com/package/xlsx https://www.npmjs.com/package/exceljs

非常感谢任何帮助。

感谢。

2 个答案:

答案 0 :(得分:2)

您的代码var worksheet = workbook.getWorksheet(1);及更高版本应位于then(function() { /* here */ }内,因为readFile函数是异步过程。

当您尚未阅读文件时,您正在尝试阅读工作表。

有关promises的一些信息。

答案 1 :(得分:2)

函数readFile是异步的,这意味着节点将告诉您的系统加载文件并在此期间继续执行其余的代码。当系统读取文件时,它将解析将执行.then(...) - 函数中的代码的承诺。

这意味着当您到达getCell时,工作簿尚未可用。将此部分移至.then(...) - 函数,它应该可以正常工作。