Javascript nodejs中的exceljs excel工作表中未填写总数据
我有一个报告任务,其中所有数据都应填写在excel文件中,并应通过邮件从后端发送给客户。我用excel.js编写了一个excel文件,它可以很好地处理较少的数据。若数据更像2000或超过那个obj,那个么所有数据都不会填入excel文件。下面是我尝试过的例子 下面是其中的APIJavascript nodejs中的exceljs excel工作表中未填写总数据,javascript,node.js,mongodb,exceljs,Javascript,Node.js,Mongodb,Exceljs,我有一个报告任务,其中所有数据都应填写在excel文件中,并应通过邮件从后端发送给客户。我用excel.js编写了一个excel文件,它可以很好地处理较少的数据。若数据更像2000或超过那个obj,那个么所有数据都不会填入excel文件。下面是我尝试过的例子 下面是其中的API router.get('/:type/:fromDate/:toDate',userAuth,(req,res)=>{ if(!req.query.ids) return res.send({'messag
router.get('/:type/:fromDate/:toDate',userAuth,(req,res)=>{
if(!req.query.ids) return res.send({'message':'Please send ID as query',statusCode:2});
let ids = req.query.ids.split(',');
var workbook = new Excel.Workbook();
let type = req.params.type
workbook.creator = ' 32';
workbook.lastModifiedBy = '321';
workbook.created = new Date();
workbook.modified = new Date();
workbook.views = [{
x: 0, y: 0, width: 10000, height: 20000,
firstSheet: 0, activeTab: 1, visibility: 'visible'
}]
var reportWorkSheet = workbook.addWorksheet( req.params.type +' Report', {
pageSetup: { paperSize: 9, orientation: 'landscape' }
});
if(type === 'customers'){
userCustomerReport(req,res ,ids , reportWorkSheet ,workbook );
} else if(type === 'interactions'){
userInteractionReport(req ,res, ids , reportWorkSheet ,workbook , req.params.fromDate , req.params.toDate);
} else if(type === 'allocations'){
userAllocationReport(req ,res,ids , reportWorkSheet ,workbook);
} else return res.send({'message':'Please check the request type',statusCode:2});
})
commonColomns = () => ([
{ header: 'Customer Name', key: 'cName', width: 25, style: { font: { size: 12 } } },
{ header: 'Customer Phone', key: 'cPhone', width: 35, style: { font: { size: 12 } } },
{ header: 'Customer Email', key: 'cEmail', width: 35, style: { font: { size: 12 } } },
{ header: 'Customer Company Name', key: 'cCompName', width: 18, style: { font: { size: 12 } } },
{ header: 'Assigned to name', key: 'assignedTName', width: 18, style: { font: { size: 12 } } },
{ header: 'Assigned from name ', key: 'assignedFName', width: 20, style: { font: { size: 12 } } }
]);
// here i am generation all JSON data .
function userInteractionReport(req ,res , ids ,reportWorkSheet , workbook , fromDate , toDate) {
let idString = req.query.ids.split(',');
let id =[];
idString.forEach(element => {id.push(new ObjectID(element));});
Interaction.aggregate([
{ $match:{$or: [{"assigned.toId":{$in:id}},{"assigned.fromId":{$in:id}}] ,createdTimeStamp : {$gte:Number(fromDate),$lt:Number(toDate)}} },
{ "$project": {
"assigned": 1,
"type": 1,
"priority": 1,
"customer": 1,
"customFields": 1,
"dateTime": 1,
"notes":1,
"length": { "$size": "$customFields" }
}},
{ "$sort": { "length": -1 } },
])
.then((interactions)=>{
if(!interactions[0]){
return res.send({'message':'No data found',statusCode:1 , "data":0})
}
let columns = commonColomns();
columns.push({ header: 'type', key: 'type', width: 25, style: { font: { size: 12 } } });
columns.push({ header: 'priority', key: 'priority', width: 25, style: { font: { size: 12 } } });
columns.push({ header: 'Company Address', key: 'cAddress', width: 25, style: { font: { size: 12 } } });
columns.push({ header: 'Key Decision Maker Name', key: 'kdm', width: 25, style: { font: { size: 12 } } });
columns.push({ header: 'Key Decision Maker Phone', key: 'kdmPhone', width: 25, style: { font: { size: 12 } } });
columns.push({ header: 'Date', key: 'dateTime', width: 25, style: { font: { size: 12 } } });
columns.push({ header: 'Notes', key: 'notes', width: 25, style: { font: { size: 12 } } });
for (let i = 0; i < interactions[0].customFields.length; i++) {
columns.push({ header: interactions[0].customFields[i].dName , key: interactions[0].customFields[i].dName, width: 25, style: { font: { size: 12 } } });
}
reportWorkSheet.columns = columns;
interactions.forEach(interaction => {
let assignedTo = interaction.assigned.toName ? interaction.assigned.toName : '';
let assignedFrom = interaction.assigned.fromName ? interaction.assigned.fromName : '';
let companyName = interaction.customer.company ? interaction.customer.company.name : '';
let cAddress ;
let kdm,kdmPhone ;
if(interaction.customer.company.address){
let companyAddress = interaction.customer.company.address ;
cAddress = companyAddress.street ? companyAddress.street+' ,' : '' ;
cAddress = cAddress + (companyAddress.city ? companyAddress.city + ' ,' :'' );
cAddress = cAddress + (companyAddress.state ? companyAddress.state +' ,' :'') ;
cAddress = cAddress+ (companyAddress.country ? companyAddress.country+' ,':'') ;
cAddress = cAddress + (companyAddress.pincode ? companyAddress.pincode +' ,' :'');
}
if(interaction.customer.company.kdm){
kdm = interaction.customer.company.kdm.fName;
kdmPhone = interaction.customer.company.kdm.phone;
}
let row = {
cName:interaction.customer.fName || '' + ' '+interaction.customer.lName || '',
cPhone : interaction.customer.phone.join(','),
assignedTName : assignedTo,
assignedFName : assignedFrom,
cEmail : interaction.email || ' ',
source : interaction.source || '',
type : interaction.type || '',
dateTime : interaction.dateTime ? new Date(interaction.dateTime) : '',
notes : interaction.notes || '',
priority : interaction.priority === 1 ? "High" : interaction.priority === 2 ? "Medium" : interaction.priority === 3 ? "Low" : " " ,
status : interaction.status||'',
cCompName : companyName,
cAddress : cAddress,
kdm :kdm,
kdmPhone:kdmPhone
}
for (let i = 0; i < interaction.customFields.length; i++) {
row[interaction.customFields[i].dName] = interaction.customFields[i].type === "dateTime" ? moment(interaction.customFields[i].value).format('l, h:mm:ss a') : interaction.customFields[i].value || " ";
}
reportWorkSheet.addRow(row);
});
return interactions;
}).then((interactions)=>{
writeWorkbook(workbook , req);
res.send({"messgae":"report send sucessfully" , "statusCode":0 ,"data":""})
}).catch((e)=>{
console.log(e);
})
}
function writeWorkbook(workbook , req) {
workbook.xlsx.writeFile('templates/excel/Report.xlsx')
.then(function () {
sendMail(req);
console.log("report send successfully ");
});
}
router.get('/:type/:fromDate/:toDate',userAuth,(req,res)=>{
如果(!req.query.ids)返回res.send({'message':'Please send ID as query',statusCode:2});
让ids=req.query.ids.split(',');
var workbook=新建Excel.workbook();
let type=req.params.type
workbook.creator='32';
workbook.lastModifiedBy='321';
workbook.created=新日期();
workbook.modified=新日期();
工作簿。视图=[{
x:0,y:0,宽:10000,高:20000,
第一页:0,活动选项卡:1,可见性:“可见”
}]
var reportWorkSheet=workbook.addWorksheet(req.params.type+'Report'{
页面设置:{纸张大小:9,方向:'横向'}
});
如果(类型==‘客户’){
userCustomerReport(req、res、ids、报告工作表、工作簿);
}else if(类型===‘交互’){
userInteractionReport(req、res、ids、报告工作表、工作簿、req.params.fromDate、req.params.toDate);
}else if(类型===‘分配’){
用户分配报告(req、res、ids、报告工作表、工作簿);
}else返回res.send({'message':'Please check the request type',statusCode:2});
})
公共列=()=>([
{标题:'Customer Name',键:'cName',宽度:25,样式:{font:{size:12}}},
{标题:'Customer Phone',键:'cPhone',宽度:35,样式:{font:{size:12}}},
{标题:'Customer Email',键:'cEmail',宽度:35,样式:{font:{size:12}}},
{标题:“客户公司名称”,键:“cCompName”,宽度:18,样式:{font:{size:12}},
{header:'Assigned to name',key:'assignedTName',宽度:18,样式:{font:{size:12}}},
{标题:'Assigned from name',键:'assignedFName',宽度:20,样式:{font:{size:12}}}
]);
//这里我生成所有JSON数据。
函数userInteractionReport(req、res、ids、报告工作表、工作簿、fromDate、toDate){
让idString=req.query.ids.split(',');
设id=[];
idString.forEach(element=>{id.push(newobjectid(element));});
交互作用([
{$match:{$or:[{“assigned.toId”:{$in:id},{“assigned.fromId”:{$in:id}],createdTimeStamp:{$gte:Number(fromDate),$lt:Number(toDate)},
{“$project”:{
“指派”:1,
“类型”:1,
"优先":一,,
“客户”:1,
“自定义字段”:1,
“日期时间”:1,
“注”:1,
“长度”:{“$size”:“$customFields”}
}},
{“$sort”:{“length”:-1},
])
.然后((交互)=>{
如果(!交互[0]){
返回res.send({'message':'No data found',状态码:1,“data:0})
}
设columns=commoncolumns();
push({header:'type',key:'type',width:25,style:{font:{size:12}}});
push({header:'priority',key:'priority',width:25,style:{font:{size:12}}});
push({header:'Company Address',key:'cadAddress',宽度:25,样式:{font:{size:12}}});
push({header:'Key Decision Maker Name',Key:'kdm',宽度:25,样式:{font:{size:12}}});
push({header:'Key Decision Maker Phone',Key:'kdmPhone',宽度:25,样式:{font:{size:12}}});
push({header:'Date',key:'dateTime',宽度:25,样式:{font:{size:12}}});
push({header:'Notes',key:'Notes',宽度:25,样式:{font:{size:12}}});
for(设i=0;i{
让assignedTo=interaction.assigned.toName?interaction.assigned.toName:“”;
让assignedFrom=interaction.assigned.fromName?interaction.assigned.fromName:“”;
让companyName=interaction.customer.company?interaction.customer.company.name:“”;
让球童穿;
让kdm,kdmPhone;
if(交互、客户、公司、地址){
让companyAddress=interaction.customer.company.address;
cAddress=companyAddress.street?companyAddress.street+',':';
CadAddress=CadAddress+(companyAddress.city?companyAddress.city+,':');
CadAddress=CadAddress+(companyAddress.state?companyAddress.state+”,“:”;
CadAddress=CadAddress+(companyAddress.country?companyAddress.country+,':');
CadAddress=CadAddress+(companyAddress.pincode?companyAddress.pincode+,':');
}
if(interaction.customer.company.kdm){
kdm=interaction.customer.company.kdm.fName;
kdmPhone=interaction.customer.company.kdm.phone;
}
让行={
cName:interaction.customer.fName | | |“+”+interaction.customer.lName | |”,
cPhone:interaction.customer.phone.join(“,”),
assignedTName:assignedTo,
assignedFName:assignedFrom,
cEmail:interaction.email | |'',
来源:interaction.source | |“”,
// pipe from stream
const workbook = new Excel.Workbook()
workbook.useSharedStrings = false
stream.pipe(workbook.xlsx.createInputStream())