如何利用exceljs将data数据导出表格实现日期去重,同时保留对应日期的每一列数据

const data = [{ deviceId: 1, name: "B相电压", signalTypeId: 1, ts: "2024-05-13 12:10:06", unit: "kV", 1: 39.37936, value:39.37936, },{ deviceId: 1, name: "A相电压", signalTypeId: 2, ts: "2024-05-13 12:11:06", unit: "kV", 1: 39.37936, value:39.37936, },{ deviceId: 1, name: "A相电压", signalTypeId: 2, ts: "2024-05-13 12:11:06", unit: "kV", 2: 39.37936, value:39.37936, },{ deviceId: 1, name: "A相电压", signalTypeId: 3, ts: "2024-05-13 12:12:06", unit: "kV", 3: 39.37936, value:39.37936, },] sheet1.columns = [ { header: '日期', key: 'ts', width: 10 }, { header: "A相", key: '1', width: 32 }, { header: 'B相', key: '2', width: 10 }, { header: 'B相', key: '3', width: 10 } ];

columns中的key值是data对象中的1:39.37936中的key,如何利用exceljs将data数据导出表格实现日期去重,同时保留对应日期的每一列数据

为了实现日期去重并保留对应日期的每一列数据,你可以使用一个对象来存储每个日期的数据,然后将该对象中的数据填充到工作表中。以下是修改后的示例代码:

javascript 复制代码
const ExcelJS = require('exceljs');

// 示例数据
const data = [{
    deviceId: 1,
    name: "B相电压",
    signalTypeId: 1,
    ts: "2024-05-13 12:10:06",
    unit: "kV",
    1: 39.37936,
    value: 39.37936,
}, {
    deviceId: 1,
    name: "A相电压",
    signalTypeId: 2,
    ts: "2024-05-13 12:11:06",
    unit: "kV",
    1: 39.37936,
    value: 39.37936,
}, {
    deviceId: 1,
    name: "A相电压",
    signalTypeId: 2,
    ts: "2024-05-13 12:11:06",
    unit: "kV",
    2: 39.37936,
    value: 39.37936,
}, {
    deviceId: 1,
    name: "A相电压",
    signalTypeId: 3,
    ts: "2024-05-13 12:12:06",
    unit: "kV",
    3: 39.37936,
    value: 39.37936,
}];

// 创建一个工作簿
const workbook = new ExcelJS.Workbook();

// 添加一个工作表
const sheet1 = workbook.addWorksheet('Sheet1');

// 设置列
sheet1.columns = [
    { header: '日期', key: 'ts', width: 15 },
    { header: "A相", key: '1', width: 15 },
    { header: 'B相', key: '2', width: 15 },
    { header: 'C相', key: '3', width: 15 }
];

// 使用对象存储每个日期的数据
const rowDataMap = {};

data.forEach(rowData => {
    const ts = rowData.ts;
    if (!rowDataMap[ts]) {
        rowDataMap[ts] = { ts };
    }
    const columnKey = rowData.signalTypeId.toString();
    rowDataMap[ts][columnKey] = rowData[columnKey] || '';
});

// 填充数据
Object.values(rowDataMap).forEach(rowData => {
    sheet1.addRow(rowData);
});

// 保存工作簿到文件
workbook.xlsx.writeFile('data.xlsx')
    .then(() => {
        console.log('Excel 文件已生成');
    })
    .catch(err => {
        console.error('保存 Excel 文件时出错:', err);
    });
相关推荐
救救孩子把4 分钟前
深入理解 Java 对象的内存布局
java
DY009J5 分钟前
深度探索Kali Linux的精髓与实践应用
linux·运维·服务器
落落落sss7 分钟前
MybatisPlus
android·java·开发语言·spring·tomcat·rabbitmq·mybatis
万物皆字节12 分钟前
maven指定模块快速打包idea插件Quick Maven Package
java
夜雨翦春韭19 分钟前
【代码随想录Day30】贪心算法Part04
java·数据结构·算法·leetcode·贪心算法
我行我素,向往自由26 分钟前
速成java记录(上)
java·速成
twins352031 分钟前
解决Vue应用中遇到路由刷新后出现 404 错误
前端·javascript·vue.js
一直学习永不止步31 分钟前
LeetCode题练习与总结:H 指数--274
java·数据结构·算法·leetcode·数组·排序·计数排序
邵泽明32 分钟前
面试知识储备-多线程
java·面试·职场和发展
程序员是干活的1 小时前
私家车开车回家过节会发生什么事情
java·开发语言·软件构建·1024程序员节