diff --git a/models/server/ExporterExcel.js b/models/server/ExporterExcel.js index 6c3c47d95..93734c590 100644 --- a/models/server/ExporterExcel.js +++ b/models/server/ExporterExcel.js @@ -167,7 +167,28 @@ class ExporterExcel { workbook.lastPrinted = new Date(); const filename = `${result.title}.xlsx`; //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 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: { tabColor: { argb: 'FFC0000', @@ -179,7 +200,7 @@ class ExporterExcel { }, }); //get worksheet - const ws = workbook.getWorksheet(result.title); + const ws = workbook.getWorksheet(worksheetTitle); ws.properties.defaultRowHeight = 20; //init columns //Excel font. Western: Arial. zh-CN: 宋体 @@ -311,7 +332,7 @@ class ExporterExcel { }; ws.getCell('A1').alignment = { vertical: 'middle', - horizontal: 'center', + horizontal: 'left', }; ws.getRow(1).height = 40; //get member and assignee info @@ -354,6 +375,7 @@ class ExporterExcel { } //add data +8 hours function addTZhours(jdate) { + if (!jdate) { return ' '; } const curdate = new Date(jdate); const checkCorrectDate = moment(curdate); if (checkCorrectDate.isValid()) { @@ -382,7 +404,14 @@ class ExporterExcel { wrapText: true, }; } - + // cell Card alignment + function cellCardAlignment(cellno) { + ws.getCell(cellno).alignment = { + vertical: 'top', + horizontal: 'left', + wrapText: true, + }; + } //all border function allBorder(cellno) { ws.getCell(cellno).border = { @@ -412,6 +441,8 @@ class ExporterExcel { ws.mergeCells('B3:H3'); 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 = { name: TAPi18n.__('excel-font'), size: 10, @@ -619,6 +650,7 @@ class ExporterExcel { name: TAPi18n.__('excel-font'), size: 10, }; + // Border allBorder(`A${y}`); allBorder(`B${y}`); allBorder(`C${y}`); @@ -637,20 +669,35 @@ class ExporterExcel { allBorder(`P${y}`); allBorder(`Q${y}`); allBorder(`R${y}`); - cellCenter(`A${y}`); - ws.getCell(`B${y}`).alignment = { + // Alignment + ws.getCell(`A${y}`).alignment = { + vertical: 'top', + horizontal: 'right', wrapText: true, }; - ws.getCell(`C${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, }; - ws.getCell(`M${y}`).alignment = { - wrapText: true, - }; - ws.getCell(`N${y}`).alignment = { - wrapText: true, - }; - ws.getCell(`O${y}`).alignment = { + ws.getCell(`R${y}`).alignment = { + vertical: 'top', + horizontal: 'center', 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 function allBorderWs2(cellno) { ws2.getCell(cellno).border = { @@ -805,37 +860,25 @@ class ExporterExcel { name: TAPi18n.__('excel-font'), 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(`B${y}`); allBorderWs2(`C${y}`); allBorderWs2(`D${y}`); allBorderWs2(`E${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 () {}); }