node-xlsx读取Excle表格重新写入新的Excle表格

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_37615202/article/details/88286139

前段时间遇到项目上的一个小工作,就是将旧的所有需要的模板导出来。然后改为新的格式并导出到新的表格中。

刚开始遇到的时候心想直接挨个改吧,后来打开一看几百个模板。瞬间死心,所以灵机一动,不如写个脚本自动转一下。。。

然后Google了一下 发现了node-xlsx这个插件,完美。。。

相关的链接:https://www.npmjs.com/package/node-xlsx

废话不说,上代码。


let fs = require('fs');//引入文件读取模块
let path = require('path');//引入文件读取模块
let xlsx = require('node-xlsx'); //引入node-xlsx模块


let filePath = path.resolve('E:/项目开发-工作/adm-ress/src/adx-confirmed');
let obj = xlsx.parse('C:/Users/Administrator/Desktop/年后打底0227.xlsx');
//[ { name: 'adx打底模板批量输出', data: [ [Array], [Array], [Array] ] } ] 返回表格数据内容
let excelObj = obj[0].data;
let data = [['广告位ID', 'ADX模板ID', '打底素材', '新模板格式代码']];

function arrAdd (arr) {
    arr.push(newAdxCode);
    data.push(arr);
    console.log(data);
}
for (let i in excelObj) {
    let arr = [];
    let newAdxCode = '';
    let value = excelObj[i];
    let creatListJson = JSON.parse(value[2]);
    arr.push(value[0]);
    arr.push(value[1]);
    arr.push(value[2]);
    fileDisplay(filePath, value[1], creatListJson, arrAdd, arr);
    console.log(arr);
}
setTimeout(() => {
    let buffer = xlsx.build([{
        name: "adx打底模板批量输出(年后new)",
        data: data
    }]);
    fs.writeFile('./adx格式打底模板(new0227).xlsx', buffer, function (err) {
        if (err) {
            throw err;
        };
        console.log('Write to xls has finished');
    });
}, 30000);

function fileDisplay(filePath, templId, tempJson, arrAdd, arr) {
    fs.readdir(filePath, function (err, files) {
        if (err) {
            console.warn(err)
        } else {
            files.forEach(function (filename) {
                let __dir = path.join(filePath, filename);
                fs.stat(__dir, function (eror, stats) {
                    if (eror) {
                        console.warn('获取文件stats失败');
                    } else {
                        let isFile = stats.isFile();
                        let isDir = stats.isDirectory();
                        if (isFile && filename.match(templId)) {
                            let content = fs.readFileSync(__dir, 'utf-8');
                            let tempCode = JSON.parse(content);
                            for (let item in tempJson) {
                                parseJson(tempCode, item, tempJson[item]);
                            };
                            newAdxCode =JSON.stringify(tempCode);
                            arrAdd(arr);
                        }
                        if (isDir) {
                            fileDisplay(__dir, templId, tempJson, add, arr);
                        }
                    }
                })
            });
        }
    });
}
function parseJson(jsonObj, jsonkey, jsonval) {
    for (let key in jsonObj) {
        let element = jsonObj[key];
        if (key == 'id' && jsonObj[key] == jsonkey) {
            jsonObj.src = jsonval;
        }
        if (element.length > 0 && typeof (element) == 'object' || typeof (element) == 'object'
        ) {
            parseJson(element, jsonkey, jsonval);
        }
    }
}

console.log('Server Start, plz wating......');

猜你喜欢

转载自blog.csdn.net/weixin_37615202/article/details/88286139