nodejs 简单实现excel转json csv格式

/**
 *  csv 转 json
 * 
 * 支持字符类型,基本的数据类型 => string int bool float
 * 
 *  格式 =>
 * 第一列为数据类型
 * 第二列为数据字段名称
 * 第三列之后为具体数据
 * 例:
int	int	string	string
id	pic	name	des
100	6	苹果	苹果
101	18	桃子	桃子
102	36	樱桃	樱桃
103	72	樱桃	樱桃
 */
let fs = require('fs');
let iconv = require('iconv-lite'); 

/** 目录 */
let dir = "./tcsv/";
// 获取文件列表
let files = fs.readdirSync(dir);

// 获取文件数据
for(let j = 0;j < files.length;j++){
  
    // 文件
    let f = files[j];
     // 同步获取文件内容
    let d = fs.readFileSync(dir + f);
    // 处理中文乱码
    d = iconv.decode(d, 'gbk')

    // 内容分割
    let datas = d.toString().split("\n");
    // 列的数量
    let collength = datas[0].split(",").length;
    // 去除的行数
    let wiperow = 2;

    // 行的数量
    let rowlength = 0;
    for(let i = 0;i < datas.length;i++){
        if(datas[i] && datas[i] != ""){
            ++rowlength;
        }
    }
    rowlength -= wiperow
   
    // json数据
    let jsond = new Array(rowlength);

    // 类型
    let types = datas[0].split(",")
    // 字段名
    let names = datas[1].split(",")

    // 循环列
    for(let i = 0;i < collength;i++){

        // 循环行
        for(let j = wiperow;j < rowlength + wiperow;j++){

            let ds = datas[j].split(",");
            if(!jsond[j-wiperow]){
                jsond[j-wiperow] = {};
            }
            
            // 去除 \r
            types[i] = types[i].replace("\r","")
            names[i] = names[i].replace("\r","")
            ds[i] = ds[i].replace("\r","")

            // 字段,类型重组
            switch(types[i]){
                case "int":
                {
                    jsond[j-wiperow][names[i]] = parseInt(ds[i]);
                    break;
                }
                case "float":
                {
                    jsond[j-wiperow][names[i]] = parseFloat(ds[i]);
                    break;
                }
                case "string":
                {
                    jsond[j-wiperow][names[i]] =  ds[i];
                    break;
                }
                case "bool":
                {
                    jsond[j-wiperow][names[i]] =  (ds[i] == "true" || ds[i] == "TRUE") ? true : false;
                    break;
                }
                default:
                {
                    console.log("该类型不存在:",types[i]);
                    break;
                }
            }
        }
    }

    // 获取文件名称
    let filename = f.split(".")[0] + ".json";
    // 覆盖写入文件
    fs.writeFileSync("./json/" + filename,JSON.stringify(jsond));

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值