如何利用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);
    });
相关推荐
周末也要写八哥几秒前
线程的生命周期之“守护“线程
java·开发语言·jvm
乐之者v1 分钟前
地图技术后端开发的知识点
java
该用户已成仙6 分钟前
vue3 使用 vuedraggable 报错 TypeError: isFunction2 is not a function
前端·javascript·vue.js
aidou13146 分钟前
Kotlin中实现星级评价选择功能(仅支持整数)
前端·kotlin·自定义view·imageview·ontouchevent·customratingbar
亦暖筑序8 分钟前
Java 8老系统AI工具接入:API包装成受控工具,只读优先+权限拦截
java·人工智能·aigc·企业架构·mcp协议
砍材农夫9 分钟前
物联网实战:Spring Boot + Netty 搭建 MQTT 统一接入层
java·网络·spring boot·后端·物联网·spring
写代码的小阿帆9 分钟前
英语四六级证书审核(SpringBoot+Dify+RPA)
java·spring boot
良逍Ai出海10 分钟前
我用 Codex 搭了一个 WordPress 独立站
前端
redaijufeng11 分钟前
我在C++中深入理解了继承,收获颇丰
java·c++·算法
TPBoreas11 分钟前
前端面试问题打把-场景题
开发语言·前端·javascript