明树Git Lab

Commit 7912bdfb authored by zfp1's avatar zfp1

up

parent e69f4187
Pipeline #104201 passed with stage
in 3 seconds
...@@ -77,96 +77,87 @@ async function getXmtzzjllTem({ startYear, endYear, tampName, projectId }) { ...@@ -77,96 +77,87 @@ async function getXmtzzjllTem({ startYear, endYear, tampName, projectId }) {
return buffer; return buffer;
} }
async function getExcelTemplate(req, res, next) { async function getTjjh({ startYear, endYear, projectId, tampName }) {
try { const workbook = new ExcelJS.Workbook();
let { tampName, projectId, startYear, endYear } = req.query;
startYear = startYear || new Date().getFullYear();
endYear = endYear || Number(startYear + 33);
let keyName = {
xmtzzjll: "项目投资资金流量表"
}
const workbook = new ExcelJS.Workbook();
let buffer;
if (tampName === 'xmtzzjll') { // 项目投资资金流量表
buffer = await getXmtzzjllTem({ startYear, endYear, tampName, projectId });
} else if (tampName === 'tjjh') { // 投决计划模板{
if (!startYear || !endYear) {
errorMessage.paramsError.message = "当前模板开始年份和结束年份不能为空";
return res.sendError(errorMessage.paramsError);
}
// 1. 读取空模板文件
const inputFilePath = path.join(__dirname, '../public/templates/投决计划.xlsx');
// 2. 处理excel 文件,动态生成表格
await workbook.xlsx.readFile(inputFilePath);
const worksheet = await workbook.getWorksheet(1);
// 2.1 处理表头
let count = endYear - startYear;
let columns = [];
for (let index = 0; index <= count; index++) {
columns.push({ name: Number(startYear + index) });
}
// 2.2 处理数据 const inputFilePath = path.join(__dirname, '../public/templates/投决计划.xlsx');
let rows = Array(42).fill([]); // 5 是模板有5行 // 2. 处理excel 文件,动态生成表格
if (!projectId) { await workbook.xlsx.readFile(inputFilePath);
let tzzjlls = await ProjectTzzjll.findAll({ const worksheet = await workbook.getWorksheet(1);
where: { projectId: projectId, del: 0 }, // 2.1 处理表头
raw: true, let count = endYear - startYear;
}); let columns = [];
tzzjlls = _.sortBy(tzzjlls, 'year'); for (let index = 0; index <= count; index++) {
rows = thvc(tzzjlls); columns.push({ name: Number(startYear + index) });
} }
console.log(rows, "=============")
// 使用addTable创建表格 // 2.2 处理数据
worksheet.addTable({ let rows = Array(42).fill([]); // 5 是模板有5行
name: 'FinancialData', if (!projectId) {
ref: 'D3', let tzzjlls = await ProjectTzzjll.findAll({
headerRow: true, where: { projectId: projectId, del: 0 },
totalsRow: false, raw: true,
style: { });
theme: null, tzzjlls = _.sortBy(tzzjlls, 'year');
showRowStripes: false, rows = thvc(tzzjlls);
showColumnStripes: false, }
}, console.log(rows, "=============")
columns: columns,
rows: rows
});
worksheet.mergeCells(2, 3, 2, (3 + columns.length)) // 使用addTable创建表格
worksheet.mergeCells(1, 1, 1, (3 + columns.length)) worksheet.addTable({
const BLACK_BORDER = { name: 'FinancialData',
top: { style: 'thin', color: { argb: 'FF000000' } }, ref: 'D3',
left: { style: 'thin', color: { argb: 'FF000000' } }, headerRow: true,
bottom: { style: 'thin', color: { argb: 'FF000000' } }, totalsRow: false,
right: { style: 'thin', color: { argb: 'FF000000' } } style: {
}; theme: null,
showRowStripes: false,
showColumnStripes: false,
},
columns: columns,
rows: rows
});
// 遍历所有单元格添加边框 worksheet.mergeCells(2, 3, 2, (3 + columns.length))
worksheet.eachRow((row, rowNumber) => { worksheet.mergeCells(1, 1, 1, (3 + columns.length))
row.eachCell((cell, colNumber) => { const BLACK_BORDER = {
if (rowNumber >= 4 && rowNumber <= 8 && colNumber >= 4 && colNumber <= (3 + columns.length)) { top: { style: 'thin', color: { argb: 'FF000000' } },
cell.numFmt = '#,##0.00'; //数字格式 left: { style: 'thin', color: { argb: 'FF000000' } },
} bottom: { style: 'thin', color: { argb: 'FF000000' } },
cell.alignment = { right: { style: 'thin', color: { argb: 'FF000000' } }
horizontal: 'center', };
vertical: 'middle', //垂直居中
wrapText: true // 遍历所有单元格添加边框
}; worksheet.eachRow((row, rowNumber) => {
cell.border = BLACK_BORDER; //边框 row.eachCell((cell, colNumber) => {
}); if (rowNumber >= 4 && rowNumber <= 8 && colNumber >= 4 && colNumber <= (3 + columns.length)) {
}); cell.numFmt = '#,##0.00'; //数字格式
// 3. 将处理后的文件发送给前端 }
res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); cell.alignment = {
res.setHeader('Content-Disposition', 'attachment; filename=' + encodeURIComponent('项目投资资金流量表.xlsx')); horizontal: 'center',
const buffer = await workbook.xlsx.writeBuffer(); vertical: 'middle', //垂直居中
// 发送文件并结束响应 wrapText: true
res.end(buffer); };
} cell.border = BLACK_BORDER; //边框
});
});
const buffer = await workbook.xlsx.writeBuffer();
return buffer;
}
else { async function getExcelTemplate(req, res, next) {
res.status(400).json({ message: '未知的模板名称' }); try {
let { tampName, projectId, startYear, endYear } = req.query;
startYear = Number(startYear) || new Date().getFullYear();
endYear = endYear || Number(startYear + 33);
let keyName = {
tjjh: "投决计划",
xmtzzjll: "项目投资资金流量表",
xmzbjxjll: "项目资本金现金流量表",
njfxjll: "能建方现金流量表",
lrb: "利润表"
} }
let buffer = await getXmtzzjllTem({ startYear, endYear, tampName, projectId, keyName });
// 3. 将处理后的文件发送给前端 // 3. 将处理后的文件发送给前端
res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
res.setHeader('Content-Disposition', 'attachment; filename=' + encodeURIComponent(`${keyName[tampName]}.xlsx`)); res.setHeader('Content-Disposition', 'attachment; filename=' + encodeURIComponent(`${keyName[tampName]}.xlsx`));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment