我正在做一个读取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 } ]
它错过了为cust2提交的phno
。
请帮助我弄清楚我必须在代码中进行哪些更改才能获得所需的输出。
我的代码是
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);
});
提前致谢!!
最佳答案
我面临着同样的问题,
在浏览了库文档之后,上述问题的解决方案是将可选参数传递给XLSX.readFile函数。
即改变
来自:var workbook = XLSX.readFile('customer.xlsx');
到:var workbook = XLSX.readFile('customer.xlsx',{sheetStubs:true});
可选对象中的sheetStubs参数允许库列出默认情况下被库的数据处理实用程序忽略的单元格。
**遍历库documentation的以下部分
1)解析选项
2)数据类型(强调数据类型z)。