前言
企业项目进行数据埋点后,埋点事件名需要整理成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 () => {