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

合格的前端,使用xlsx

背景

公司为了后续文档的规范化,针对之前不规范使用xlsx文档的方式,需要通过后台管理起来。

对于开发人员,我们面临的问题就是需要把旧的数据与新的需求更好的结合在一起,不过在此之前,需要处理原有xlsx文档中不规范的数据;也就是说有些数据是符合规范的,由于数据量过万,人工处理是不现实的(别问wps的代码可以不可以处理, 鄙人对写wps代码从大学就开始抵触)

目的

需要在现有的国际化xlsx文档中,找出不规范的数据,
最终是,把不规范的数据生成为另外一份xlsx文档,给到后端作为系统的初始化数据导入数据表(如果这里大家有工作分工的疑问,那就是能者多劳)

已有条件

  1. 现有的包含所有数据的xlsx文档 (有规范化也有不规范化的数据)
  2. 已经规范化的一份xlsx文档

分析

针对条件1

  • 把其中满足规范的数据过滤出去

针对条件2

  • 把国际化的key整理为一个数组,(方便后续过滤使用)

代码

需要去重,确保旧文档中没有重复的数据
1.xlsx: 总的xlsx文档
2.xlsx: 已规范化的文档
3.xlsx: 没有规范化的文档

// 引入 xlsx 库
const XLSX = require("xlsx");

// 读取 Excel 文件
const workbook = XLSX.readFile("1.xlsx");

/** 获取 规范化 key集合 */
function getUnusedKey() {
    const output = XLSX.readFile("2.xlsx");
    // 获取第一个工作表
    const sheetName = output.SheetNames[0];
    const worksheet = output.Sheets[sheetName];

    // 将工作表数据转换为 JSON 格式
    const data = XLSX.utils.sheet_to_json(worksheet);
    // 根据第一列的数值去重
    const uniqueData = [];
    const seen = new Set();
    for (const row of data) {
        const key = row[Object.keys(row)[1]];
        if (!seen.has(key)) {
            seen.add(key);
            uniqueData.push(key);
        }
    }
    return uniqueData;
}

// 获取第一个工作表
const sheetName = workbook.SheetNames[0];
const worksheet = workbook.Sheets[sheetName];

// 将工作表数据转换为 JSON 格式
const data = XLSX.utils.sheet_to_json(worksheet);
const alreadyRunKey = getUnusedKey();

// 根据第一列的数值去重
const uniqueData = [];
const seen = new Set();
for (const row of data) {
  const key = row[Object.keys(row)[0]]; // 获取第一列的值
  if (!seen.has(key) && !alreadyRunKey.includes(key)) {
    seen.add(key);
    uniqueData.push(row);
  }
}

// 创建新的工作簿并写入去重后的数据
const newWorkbook = XLSX.utils.book_new();
const newWorksheet = XLSX.utils.json_to_sheet(uniqueData);
XLSX.utils.book_append_sheet(newWorkbook, newWorksheet, "sheet1");

// // 将新工作簿保存为新文件
XLSX.writeFile(newWorkbook, "3.xlsx");

我们可以看到上面的代码,都特别的业务性质,为了特定的过滤增加的脚本,该文不仅是想帮助大家解决遇到的问题,更多的是给大家提供一种解决思路。
也让大家可以更充分的使用js

写在最后

如果该文有给到大家启发和帮助,就帮博主点个赞吧!


http://www.kler.cn/a/509798.html

相关文章:

  • 如何使用C#与SQL Server数据库进行交互
  • Vue3中ref和reactive的区别
  • MERN全栈脚手架(MongoDB、Express、React、Node)与Yeoman详解
  • 【Go】Go Gorm 详解
  • ComfyUI-PromptOptimizer:文生图提示优化节点
  • 单元测试与unittest框架
  • 蓝桥杯真题 - 公因数匹配 - 题解
  • 【LLM】Openai-o1及o1类复现方法
  • 《C++11》深入剖析正则表达式库:解锁文本处理的高效之道
  • vue | 插值表达式
  • K近邻算法实战——电影分类算法
  • 迅为瑞芯微RK3562开发板/核心板应用于人脸跟踪、身体跟踪、视频监控、自动语音识别(ASR)、图像分类驾驶员辅助系统(ADAS)...
  • QQ邮箱登录逆向
  • 前端包管理工具npm、pnpm 和 Yarn 的总结对比
  • Python爬虫(5) --爬取网页视频
  • C# (图文教学)在C#的编译工具Visual Studio中使用SQLServer并对数据库中的表进行简单的增删改查--14
  • 机器学习中的方差与偏差
  • Kubernetes (K8s) 入门指南
  • rocketmq集群启动和下线
  • 花诗蕾奇亚籽抹茶代餐粉和固态速溶茶,YYDS!
  • 免费的数据标注工具
  • 2.5 如何评估表示学习
  • 深度学习基础知识
  • Hive集群的安装准备
  • .Net 6.0 .Net7.0 .Net8.0 .Net9.0 使用 Serilog 按日志等级写入日志及 appsetting.json 配置方式实现
  • Linux 管道操作