如何将 Javascript 数组元素存储在 excel 文件中,同时将 JSON 对象转换为节点 js 中的 excel 文件?
How to store Javascript array elements in excel file while converting JSON object to excel file in node js?
我有一个用例,我需要将用户数据导出到 excel 文件中。用户模型(mongo 数据库模型)包含一个类型为 array
的字段。导出时,除了数组字段数据外,每个字段都存储到 excel 文件中。如何将该数组数据作为逗号分隔值存储到 excel 文件中?
这是我的代码:
var XLSX = require('xlsx');
exportCustomerDataToExcel: async function(customerId){
let err,customerData;
[err, customerData]=await to(Customer.find({"_id":customerId},'name email phone unit block communityAccountNo status').lean().exec());
//*name email phone unit block communityAccountNo status* are fields of customer & unit is an array
if(err) {TE(err, true)};
if(!customerData || customerData.length==0) return false;
if(customerData){
customerData.map(function(elem) {
if (elem._id) delete elem._id
});
var newWB=XLSX.utils.book_new();
var newWS=XLSX.utils.json_to_sheet(customerData);
XLSX.utils.book_append_sheet(newWB, newWS,"Customers");
[err,excelWB]=await to(this.writeFileQ(newWB, "./public/exports/"+customerId+".xlsx"));
if(err) TE(err, true);
return ({file:customerId+".xlsx"});
}
},
writeFileQ: function(workbook, filename) {
return new Promise((resolve, reject) => {
XLSX.writeFileAsync(filename, workbook, (error, result) => {
(error)? reject(error) : resolve(result);
});
});
}
示例代码为:
{
"name" : "Some Name",
"email" : "SomeName@gmail.com",
"phone" : "94XXXXXXXX",
"communityAccountNo" : "ABCD1234",
"status" : true,
"block" : "1",
"unit" : [
"9-2",
"9-3"
]
}
这是我得到的excel:
我想将单位元素存储为 9-2,9-3 在 unit 选项卡下。可以这样做吗?
您应该在创建 excel 文件之前将数组重新格式化为字符串,以使其按您希望的方式工作。您可以通过使用 Array join
方法并使用 ,
作为参数来实现此目的。像这样:
customerData.unit = customerData.unit.join(',');
甚至 customerData.unit = customerData.unit.join();
因为 ,
是默认参数。
然后创建您的 excel sheet.
我有一个用例,我需要将用户数据导出到 excel 文件中。用户模型(mongo 数据库模型)包含一个类型为 array
的字段。导出时,除了数组字段数据外,每个字段都存储到 excel 文件中。如何将该数组数据作为逗号分隔值存储到 excel 文件中?
这是我的代码:
var XLSX = require('xlsx');
exportCustomerDataToExcel: async function(customerId){
let err,customerData;
[err, customerData]=await to(Customer.find({"_id":customerId},'name email phone unit block communityAccountNo status').lean().exec());
//*name email phone unit block communityAccountNo status* are fields of customer & unit is an array
if(err) {TE(err, true)};
if(!customerData || customerData.length==0) return false;
if(customerData){
customerData.map(function(elem) {
if (elem._id) delete elem._id
});
var newWB=XLSX.utils.book_new();
var newWS=XLSX.utils.json_to_sheet(customerData);
XLSX.utils.book_append_sheet(newWB, newWS,"Customers");
[err,excelWB]=await to(this.writeFileQ(newWB, "./public/exports/"+customerId+".xlsx"));
if(err) TE(err, true);
return ({file:customerId+".xlsx"});
}
},
writeFileQ: function(workbook, filename) {
return new Promise((resolve, reject) => {
XLSX.writeFileAsync(filename, workbook, (error, result) => {
(error)? reject(error) : resolve(result);
});
});
}
示例代码为:
{
"name" : "Some Name",
"email" : "SomeName@gmail.com",
"phone" : "94XXXXXXXX",
"communityAccountNo" : "ABCD1234",
"status" : true,
"block" : "1",
"unit" : [
"9-2",
"9-3"
]
}
这是我得到的excel:
我想将单位元素存储为 9-2,9-3 在 unit 选项卡下。可以这样做吗?
您应该在创建 excel 文件之前将数组重新格式化为字符串,以使其按您希望的方式工作。您可以通过使用 Array join
方法并使用 ,
作为参数来实现此目的。像这样:
customerData.unit = customerData.unit.join(',');
甚至 customerData.unit = customerData.unit.join();
因为 ,
是默认参数。
然后创建您的 excel sheet.