一个小前端用代码解决姐姐的工作难题

269 阅读2分钟

我正在参加「掘金·启航计划」

许久不联系,忽然找你,那就是有事;中文吃饭收到姐的微信,帮我把两个表格合并一下;好的,吃了饭弄;真的就合并这么简单吗?

需求

有两个表格,一个表格中有银行卡号、姓名余额(700多条数据);另一个表格中有银行卡号和商户编号,表格一中的银行卡号在表格二中可能没有,表格二中有的银行卡号表格一中可能没有;目的是要将表格二中的商户编号对应到表格一中

解决方法

  1. 如果一个一个对应肯定不显示,本人对表格的公式也不熟悉,所以只能想到用代码解决

  2. 解决思路:

    a. 如果表格的数据都是json就好了,遍历一下找到对应银行卡号,set一个商户编号字段就好了撒

    b. 表格转json:能想到csv文件可以转json,表格可以导出为csv文件

    c. 处理之后再将json文件转为csv文件,问题就解决了撒

几个注意的点和未解决的疑问:

  1. 表格中的表头不能用中文,里面的中文会乱码(没有找到解决方法)
  2. 里面的名字是中文也会乱码,已经使用了utf-8

使用node将csv文件转为json

  1. 使用npm init初始化包
  2. 安装csvtojson和fs,npm install csvtojson --save-dev、npm install fs--save-dev
  3. 写上代码
  4. 执行node csvToJson.js
const curDirPath = "E:/test/csv"
const csv=require('csvtojson');
var fs = require('fs');

fs.readdir(curDirPath, (err, files) => {
  files.forEach(fileName => {
    csv()
      .fromFile(`${curDirPath}/${fileName}`)
      .then((jsonObj)=>{
        jsonObj = JSON.stringify(jsonObj);
        let jsonFileName = fileName.replace(/.{1}[a-z]{1,}$/, ".json");
        fs.writeFile(`./json/${jsonFileName}`, jsonObj, 'utf-8', function(err) {
          console.log("转换成功");
        });
      })
  });
});

使用js处理数据,并且导出成json文件

  1. 这一步对于程序员来说就很简单了撒
  2. node中使用require导入文件
  3. 循环一下添加一个属性
  4. 使用writeFile导出数据为json文件
const yye = require('./json/9yye.json');
const yhkh = require('./json/hfykk.json');
var fs = require('fs');
yye.forEach((item)=>{
    const findItem = yhkh.find((yhkh)=>{
        return yhkh.yhkh === item.yhkh
    })
    if(findItem){
        item.shbh = findItem.shbh
    }
})
const content = JSON.stringify(yye,null,'\t')
fs.writeFile('./csv1/result.json',content,function () {
    console.log('创建成功')
})

再将json数据转换成csv文件

安装json2csv

let fs = require('fs');
const curDirPath = 'E:/test1/json2';
const Json2csvParser = require('json2csv').Parser;

fs.readdir(curDirPath, (err, files) => {
    files.forEach(file => {
        fs.readFile(curDirPath + `/${file}`, 'utf-8', (err, data) => {
            let keyArr = [];
            data = JSON.parse(data);
            for(let i in data) {
                keyArr.push(Object.keys(data[i]));
            }
            let keyArrSort = keyArr.sort((a, b) => {
                return b.length - a.length
            })
            let fields = keyArrSort[0];
            const json2csvParser = new Json2csvParser({ fields });
            const csv = json2csvParser.parse(data);
            let csvFileName = file.replace(/.{1}[a-z]{1,}$/, ".csv");
            fs.writeFile(`./csv1/${csvFileName}`, csv, function(err) {
                console.log("转换成功");
            });
        });
    });
});

文件目录如下

最后

偶尔生活中出现一个小插曲,能够用自己的知识帮助到别人(让不在这个行业的人觉得我们用代码还是能干挺多事的),还是挺开心的

祝愿每一个看到文章的小伙伴天天开心~身体健康