【Node.js】写一个数据自动整理成表格的脚本

本文介绍了如何通过编写Node.js脚本来自动化整理数据埋点信息,将其转化为Excel表格。作者选择了node-xlsx库来生成表格,首先将埋点数据复制并转换为符合模块化要求的格式,然后整理成二维数组,最后生成Excel表格。这个脚本避免了手动复制粘贴的繁琐工作,提高了工作效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

企业项目进行数据埋点后,埋点事件名需要整理成Excel表格便于统计,目标是将下图左侧数据转化成下图右侧的Excel表格:

考虑到左侧埋点数据是随项目迭代增加的,埋点数据每增加一次我就要把数据一条一条的Ctrl+C/V复制粘贴至Excel表格内。

懒,不想这样玩,于是我写了一个自动帮我整理成表格的脚本。

脚本实现

实现流程

  • Node.js生成Excel表格工具库技术选型
  • 单独复制一份埋点数据出来,保证它的变动不会影响业务相关埋点逻辑
  • 整理埋点数据成我们需要的数据结构

分成三步走

技术选型

Node.js操作Excel表格工具库有:

仅罗列以上四个。

选择的角度有以下几点:

  • 学习成本低,文档API简单易用,仅生成表格即可,其他功能并不需要,所以API越简单越好
  • 生成Excel表格需要提供的数据结构简单,便于实现
  • 能导出xlsx表格,满足最基本要求

node-xlsx最贴近以上要求,首选使用它。

node-xlsx官方生成Excel表格给出的代码块:

import xlsx from 'node-xlsx';
// Or var xlsx = require('node-xlsx').default;

const data = [
  [1, 2, 3],
  [true, false, null, 'sheetjs'],
  ['foo', 'bar', new Date('2014-02-19T14:30Z'), '0.3'],
  ['baz', null, 'qux'],
];
var buffer = xlsx.build([{
   name: 'mySheetName', data: data}]); // Returns a buffer

生成表格数据data是二维数组,对应表格的行列。data.length 为表格行数,data[0].length 为表格的列数;data[0][0]对应至表格的第一行第一列的值,data[0][1]对应至表格的第一行第二列的值。

所以将埋点数据整理为一个二维数组即可,二维数组数据结构整理容易实现。

复制埋点数据

埋点数据统一放置在buryData.js 文件,但不能随意改动它,所以将该文件单独再复制一份出来。

buryData.js

export default {
   
    version1: 'v1.5.3',
    bury1: 'ding提醒',
    bury2: '审批-筛选',
    bury3: '任务-点击任务标题打开任务详情',
    bury4: '任务详情弹框-点击详情tab',
    bury5: '任务详情弹框-点击日志记录tab',
    bury6: '任务详情弹框-点击工作总结tab',
    bury7: '任务详情弹框-点击动态tab',
    //...
}

buryData.js复制出来文件命名为bury.js,还有一个问题:bury.js需要执行它,拿到它导出的数据对象,导出数据是使用ES6模块化语法,这边需要将ES6模块化转化成CommonJs模块化,将export default {} 替换成module.exports ={}即可做到。

Node.js fs模块+正则替换是可以达成以上目的,但为了更快捷,我选择使用工具库magic-string

magic-string它是操作字符串库,它可以帮我去掉写正则替换字符串的步骤。

const path = require('path');
const magicString = require('magic-string')
const fs = require('fs');

//buryData.js 文件路径
const buryFile = path.join(__dirname, '../src/lib/buryData.js')

const getBuryContent = (filePath) => {
   
    const content = fs.readFileSync(filePath, 'utf8')
    //将export default 替换成module.exports =
    const s = new magicString(content)
    s.replace('export default', 'module.exports = ')
    return s.toString()
}

(async () => {
   
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值