JavaScript(节点js)在读取Excel文件时跳过空单元格

时间:2017-08-07 11:29:15

标签: javascript node.js excel

我正在执行一项小任务,以读取Excel工作表并以json格式保存。我所使用的代码在存在所有单元格值时运行良好,如果有任何空单元格,则跳过该单元格。

如果没有显示任何值,我想要的输出(在我的情况下,我错过了cust2电话号码)如下所示。

[ { cust_name: 'Ben', cust_city: 'Street1', cust_country: 'country1', phno: 1 }, { cust_name: 'Ken', cust_city: 'street2', cust_country: 'country2' phno:}, { cust_name: 'Ron', cust_city: 'street3', cust_country: 'country3', phno: 3 } ]

但我得到的输出是

[ { cust_name: 'Ben', cust_city: 'Street1', cust_country: 'country1', phno: 1 }, { cust_name: 'Ken', cust_city: 'street2', cust_country: 'country2' }, { cust_name: 'Ron', cust_city: 'street3', cust_country: 'country3', phno: 3 } ]

它错过了phno提交的cust2。

请帮我弄清楚我的代码中需要更改的内容才能获得所需的输出。

我的代码是

 var XLSX = require('xlsx');
 var workbook = XLSX.readFile('customer.xlsx');
 var sheet_name_list = workbook.SheetNames;
 sheet_name_list.forEach(function(y) {
 var worksheet = workbook.Sheets[y];
 var headers = {};
 var data = [];
 for(z in worksheet) {
    if(z[0] === '!') continue;
    //parse out the column, row, and value
    var col = z.substring(0,1);
    var row = parseInt(z.substring(1));
    var value = worksheet[z].v;

    //store header names
    if(row == 1) {
        headers[col] = value;
        continue;
    }
    if(!data[row]) data[row]={};
    data[row][headers[col]] = value;
 }
 //drop those first two rows which are empty
 data.shift();
 data.shift();
 console.log(data);
 });

提前致谢!!

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题, 并且通过库文档后,上述问题的解决方案是将可选参数传递给XLSX.readFile函数。

即改变

from:var workbook = XLSX.readFile(' customer.xlsx');

to: var workbook = XLSX.readFile(' customer.xlsx', {sheetStubs:true} );

可选对象中的 sheetStubs 参数允许库列出默认情况下由库的数据处理实用程序忽略的单元格。

**浏览库documentation

的以下部分

1)解析选项 2)数据类型(强调数据类型z)。