|
@@ -167,7 +167,28 @@ class ExporterExcel {
|
|
workbook.lastPrinted = new Date();
|
|
workbook.lastPrinted = new Date();
|
|
const filename = `${result.title}.xlsx`;
|
|
const filename = `${result.title}.xlsx`;
|
|
//init worksheet
|
|
//init worksheet
|
|
- const worksheet = workbook.addWorksheet(result.title, {
|
|
|
|
|
|
+ let worksheetTitle = result.title;
|
|
|
|
+ if (worksheetTitle.length > 31) {
|
|
|
|
+ // MS Excel doesn't allow worksheet name longer than 31 chars
|
|
|
|
+ // Exceljs truncate names to 31 chars
|
|
|
|
+ let words = worksheetTitle.split(" ");
|
|
|
|
+ let tmpTitle = "";
|
|
|
|
+ for (let i=0;i<words.length; i++) {
|
|
|
|
+ if (words[0].length > 27) {
|
|
|
|
+ // title has no spaces
|
|
|
|
+ tmpTitle = words[0].substr(0,27) + " ";
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ if(tmpTitle.length + words[i].length < 27) {
|
|
|
|
+ tmpTitle += words[i] + " ";
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ worksheetTitle = tmpTitle + "...";
|
|
|
|
+ }
|
|
|
|
+ const worksheet = workbook.addWorksheet(worksheetTitle, {
|
|
properties: {
|
|
properties: {
|
|
tabColor: {
|
|
tabColor: {
|
|
argb: 'FFC0000',
|
|
argb: 'FFC0000',
|
|
@@ -179,7 +200,7 @@ class ExporterExcel {
|
|
},
|
|
},
|
|
});
|
|
});
|
|
//get worksheet
|
|
//get worksheet
|
|
- const ws = workbook.getWorksheet(result.title);
|
|
|
|
|
|
+ const ws = workbook.getWorksheet(worksheetTitle);
|
|
ws.properties.defaultRowHeight = 20;
|
|
ws.properties.defaultRowHeight = 20;
|
|
//init columns
|
|
//init columns
|
|
//Excel font. Western: Arial. zh-CN: 宋体
|
|
//Excel font. Western: Arial. zh-CN: 宋体
|
|
@@ -311,7 +332,7 @@ class ExporterExcel {
|
|
};
|
|
};
|
|
ws.getCell('A1').alignment = {
|
|
ws.getCell('A1').alignment = {
|
|
vertical: 'middle',
|
|
vertical: 'middle',
|
|
- horizontal: 'center',
|
|
|
|
|
|
+ horizontal: 'left',
|
|
};
|
|
};
|
|
ws.getRow(1).height = 40;
|
|
ws.getRow(1).height = 40;
|
|
//get member and assignee info
|
|
//get member and assignee info
|
|
@@ -354,6 +375,7 @@ class ExporterExcel {
|
|
}
|
|
}
|
|
//add data +8 hours
|
|
//add data +8 hours
|
|
function addTZhours(jdate) {
|
|
function addTZhours(jdate) {
|
|
|
|
+ if (!jdate) { return ' '; }
|
|
const curdate = new Date(jdate);
|
|
const curdate = new Date(jdate);
|
|
const checkCorrectDate = moment(curdate);
|
|
const checkCorrectDate = moment(curdate);
|
|
if (checkCorrectDate.isValid()) {
|
|
if (checkCorrectDate.isValid()) {
|
|
@@ -382,7 +404,14 @@ class ExporterExcel {
|
|
wrapText: true,
|
|
wrapText: true,
|
|
};
|
|
};
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+ // cell Card alignment
|
|
|
|
+ function cellCardAlignment(cellno) {
|
|
|
|
+ ws.getCell(cellno).alignment = {
|
|
|
|
+ vertical: 'top',
|
|
|
|
+ horizontal: 'left',
|
|
|
|
+ wrapText: true,
|
|
|
|
+ };
|
|
|
|
+ }
|
|
//all border
|
|
//all border
|
|
function allBorder(cellno) {
|
|
function allBorder(cellno) {
|
|
ws.getCell(cellno).border = {
|
|
ws.getCell(cellno).border = {
|
|
@@ -412,6 +441,8 @@ class ExporterExcel {
|
|
|
|
|
|
ws.mergeCells('B3:H3');
|
|
ws.mergeCells('B3:H3');
|
|
ws.getRow(3).height = 40;
|
|
ws.getRow(3).height = 40;
|
|
|
|
+ // In MS Excel, we can't use the AutoFit feature on a column that contains a cell merged with cells in other columns.
|
|
|
|
+ // Likewise, we can't use AutoFit on a row that contains a cell merged with cells in other rows.
|
|
ws.getRow(3).font = {
|
|
ws.getRow(3).font = {
|
|
name: TAPi18n.__('excel-font'),
|
|
name: TAPi18n.__('excel-font'),
|
|
size: 10,
|
|
size: 10,
|
|
@@ -619,6 +650,7 @@ class ExporterExcel {
|
|
name: TAPi18n.__('excel-font'),
|
|
name: TAPi18n.__('excel-font'),
|
|
size: 10,
|
|
size: 10,
|
|
};
|
|
};
|
|
|
|
+ // Border
|
|
allBorder(`A${y}`);
|
|
allBorder(`A${y}`);
|
|
allBorder(`B${y}`);
|
|
allBorder(`B${y}`);
|
|
allBorder(`C${y}`);
|
|
allBorder(`C${y}`);
|
|
@@ -637,20 +669,35 @@ class ExporterExcel {
|
|
allBorder(`P${y}`);
|
|
allBorder(`P${y}`);
|
|
allBorder(`Q${y}`);
|
|
allBorder(`Q${y}`);
|
|
allBorder(`R${y}`);
|
|
allBorder(`R${y}`);
|
|
- cellCenter(`A${y}`);
|
|
|
|
- ws.getCell(`B${y}`).alignment = {
|
|
|
|
|
|
+ // Alignment
|
|
|
|
+ ws.getCell(`A${y}`).alignment = {
|
|
|
|
+ vertical: 'top',
|
|
|
|
+ horizontal: 'right',
|
|
wrapText: true,
|
|
wrapText: true,
|
|
};
|
|
};
|
|
- ws.getCell(`C${y}`).alignment = {
|
|
|
|
- wrapText: true,
|
|
|
|
- };
|
|
|
|
- ws.getCell(`M${y}`).alignment = {
|
|
|
|
- wrapText: true,
|
|
|
|
- };
|
|
|
|
- ws.getCell(`N${y}`).alignment = {
|
|
|
|
|
|
+ cellCardAlignment(`B${y}`);
|
|
|
|
+ cellCardAlignment(`C${y}`);
|
|
|
|
+ cellCardAlignment(`D${y}`);
|
|
|
|
+ cellCardAlignment(`E${y}`);
|
|
|
|
+ cellCardAlignment(`F${y}`);
|
|
|
|
+ cellCardAlignment(`G${y}`);
|
|
|
|
+ cellCardAlignment(`H${y}`);
|
|
|
|
+ cellCardAlignment(`I${y}`);
|
|
|
|
+ cellCardAlignment(`J${y}`);
|
|
|
|
+ cellCardAlignment(`K${y}`);
|
|
|
|
+ cellCardAlignment(`L${y}`);
|
|
|
|
+ cellCardAlignment(`M${y}`);
|
|
|
|
+ cellCardAlignment(`N${y}`);
|
|
|
|
+ cellCardAlignment(`O${y}`);
|
|
|
|
+ cellCardAlignment(`P${y}`);
|
|
|
|
+ ws.getCell(`Q${y}`).alignment = {
|
|
|
|
+ vertical: 'top',
|
|
|
|
+ horizontal: 'center',
|
|
wrapText: true,
|
|
wrapText: true,
|
|
};
|
|
};
|
|
- ws.getCell(`O${y}`).alignment = {
|
|
|
|
|
|
+ ws.getCell(`R${y}`).alignment = {
|
|
|
|
+ vertical: 'top',
|
|
|
|
+ horizontal: 'center',
|
|
wrapText: true,
|
|
wrapText: true,
|
|
};
|
|
};
|
|
}
|
|
}
|
|
@@ -714,6 +761,14 @@ class ExporterExcel {
|
|
},
|
|
},
|
|
},
|
|
},
|
|
];
|
|
];
|
|
|
|
+ // cell Card alignment
|
|
|
|
+ function cellCardAlignmentWs2(cellno) {
|
|
|
|
+ ws2.getCell(cellno).alignment = {
|
|
|
|
+ vertical: 'top',
|
|
|
|
+ horizontal: 'left',
|
|
|
|
+ wrapText: true,
|
|
|
|
+ };
|
|
|
|
+ }
|
|
//all border
|
|
//all border
|
|
function allBorderWs2(cellno) {
|
|
function allBorderWs2(cellno) {
|
|
ws2.getCell(cellno).border = {
|
|
ws2.getCell(cellno).border = {
|
|
@@ -805,37 +860,25 @@ class ExporterExcel {
|
|
name: TAPi18n.__('excel-font'),
|
|
name: TAPi18n.__('excel-font'),
|
|
size: 10,
|
|
size: 10,
|
|
};
|
|
};
|
|
- ws2.getCell(`A${y}`).alignment = {
|
|
|
|
- vertical: 'middle',
|
|
|
|
- horizontal: 'center',
|
|
|
|
- wrapText: true,
|
|
|
|
- };
|
|
|
|
- ws2.getCell(`B${y}`).alignment = {
|
|
|
|
- vertical: 'middle',
|
|
|
|
- wrapText: true,
|
|
|
|
- };
|
|
|
|
- ws2.getCell(`C${y}`).alignment = {
|
|
|
|
- vertical: 'middle',
|
|
|
|
- wrapText: true,
|
|
|
|
- };
|
|
|
|
- ws2.getCell(`D${y}`).alignment = {
|
|
|
|
- vertical: 'middle',
|
|
|
|
- wrapText: true,
|
|
|
|
- };
|
|
|
|
- ws2.getCell(`E${y}`).alignment = {
|
|
|
|
- vertical: 'middle',
|
|
|
|
- wrapText: true,
|
|
|
|
- };
|
|
|
|
- ws2.getCell(`F${y}`).alignment = {
|
|
|
|
- vertical: 'middle',
|
|
|
|
- wrapText: true,
|
|
|
|
- };
|
|
|
|
|
|
+ // Border
|
|
allBorderWs2(`A${y}`);
|
|
allBorderWs2(`A${y}`);
|
|
allBorderWs2(`B${y}`);
|
|
allBorderWs2(`B${y}`);
|
|
allBorderWs2(`C${y}`);
|
|
allBorderWs2(`C${y}`);
|
|
allBorderWs2(`D${y}`);
|
|
allBorderWs2(`D${y}`);
|
|
allBorderWs2(`E${y}`);
|
|
allBorderWs2(`E${y}`);
|
|
allBorderWs2(`F${y}`);
|
|
allBorderWs2(`F${y}`);
|
|
|
|
+ // Alignment
|
|
|
|
+ ws2.getCell(`A${y}`).alignment = {
|
|
|
|
+ vertical: 'top',
|
|
|
|
+ horizontal: 'right',
|
|
|
|
+ wrapText: true,
|
|
|
|
+ };
|
|
|
|
+ cellCardAlignmentWs2(`B${y}`);
|
|
|
|
+ cellCardAlignmentWs2(`C${y}`);
|
|
|
|
+ cellCardAlignmentWs2(`D${y}`);
|
|
|
|
+ cellCardAlignmentWs2(`E${y}`);
|
|
|
|
+ cellCardAlignmentWs2(`F${y}`);
|
|
|
|
+
|
|
}
|
|
}
|
|
workbook.xlsx.write(res).then(function () {});
|
|
workbook.xlsx.write(res).then(function () {});
|
|
}
|
|
}
|