当前位置: 首页 > news >正文

如何利用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数据导出表格实现日期去重,同时保留对应日期的每一列数据

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

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);});

相关文章:

  • 【C++ | 拷贝构造函数】一文了解C++的 拷贝(复制)构造函数
  • 【Linux】进程(8):Linux真正是如何调度的
  • Gradio.NET:一个快速制作演示demo网页的利器
  • 鸿蒙开发接口数据管理:【@ohos.data.preferences (首选项)】
  • 在Windows中使用svn的命令行
  • 【ARFoundation自学04】AR Tracked Image 图像追踪识别
  • 基于安卓的虫害识别软件设计--(1)模型训练与可视化
  • 关于安装typescript后运行tsc -v命令报错问题
  • idm2024最新完美破解版免费下载 idm绿色直装版注册机免费分享 idm永久激活码工具
  • HTML5 视频 Vedio 标签详解
  • 神经网络---网络模型的保存、加载
  • 分治算法例子
  • OceanBase v4.2 解读:tenant=all 语义优化,提升易用性
  • Java Web学习笔记4——HTML、CSS
  • PyTorch 的 torch.nn 模块学习
  • 《Java编程思想》读书笔记-对象导论
  • 【知识碎片】第三方登录弹窗效果
  • Apache的80端口被占用以及访问时报错403
  • css属性的继承、初识值、计算值、当前值、应用值
  • Github访问慢解决办法
  • magento 货币换算
  • MaxCompute访问TableStore(OTS) 数据
  • Python socket服务器端、客户端传送信息
  • Swoft 源码剖析 - 代码自动更新机制
  • uva 10370 Above Average
  • 前端技术周刊 2019-02-11 Serverless
  • 深入浅出Node.js
  • 赢得Docker挑战最佳实践
  • 原生 js 实现移动端 Touch 滑动反弹
  • ​Java基础复习笔记 第16章:网络编程
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (LeetCode C++)盛最多水的容器
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (二)hibernate配置管理
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • .Net IOC框架入门之一 Unity
  • .NET 反射的使用
  • .net 获取url的方法
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .NET6 开发一个检查某些状态持续多长时间的类
  • .net分布式压力测试工具(Beetle.DT)
  • ?
  • [Android 13]Input系列--获取触摸窗口
  • [ARC066F]Contest with Drinks Hard
  • [BZOJ3757] 苹果树
  • [BZOJ4016][FJOI2014]最短路径树问题
  • [C#小技巧]如何捕捉上升沿和下降沿
  • [CISCN 2019华东南]Web11
  • [CTSC2014]企鹅QQ