项目中有个需求是使用node.js后端读取数据库数据,经过处理后,将数据生成一个单独的sheet页插入一个excel模板中
我是用的是const XLSX = require('xlsx'); sheet页可以正常插入,但是整个excel文件的所有sheet页的格式样式(字体字号颜色,背景色,行高行宽等)都变成了默认值
这种情况应该如何解决?
具体代码片段如下:
async updata_excel() {
const { ctx } = this;
const { checkpoint, dateString, } = ctx.request.body;
try {
console.log('in updata_excel_dka');
const filePath = 'XXX'; // 文件路径设置位置
const sheetName = XXX'; //sheet页命名
// 获取数据
const databaseData =XXX// 数据库获取的数据
// 将JSON数据转换为二维数组(表头 + 数据行)
function convertDataToAoA(data) {
// 首先,确定表头(即JSON对象的键)
const headers = Object.keys(data[0]).map(key => {
// 可能需要处理某些键名,例如将驼峰命名转换为空格分隔等
// 这里简单返回原键名
return key;
});
// 然后,将数据和表头组合成二维数组
const aoa = [headers, ...data.map(item => headers.map(key => item[key] || ''))];
return aoa;
}
// 写入Excel文件
function writeToExcel(filePath, sheetName, data) {
// 转换数据为二维数组
const aoa = convertDataToAoA(data);
// 创建一个新的工作簿或读取现有工作簿(如果需要)
let workbook = XLSX.utils.book_new();
if (fs.existsSync(filePath)) {
const workbookBuffer = fs.readFileSync(filePath);
workbook = XLSX.read(workbookBuffer, { type: 'buffer' });
// 如果sheet已存在,则清空其内容
if (workbook.Sheets[sheetName]) {
XLSX.utils.sheet_add_json(workbook.Sheets[sheetName], [], { header: [], origin: 'A1', skipHeader: true });
}
}
// 将数据写入sheet
workbook.Sheets[sheetName] = XLSX.utils.aoa_to_sheet(aoa);
// 写入文件
const wbout = XLSX.write(workbook, { bookType: 'xlsx', type: 'buffer' });
fs.writeFileSync(filePath, wbout);
console.log('Excel file has been updated.');
}
// 调用函数以写入数据
writeToExcel(filePath, sheetName, databaseData);
} catch (error) {
console.log(error)
ctx.body = {
errCode: 1,
errMsg: "发生了错误"
}
}
}