Node--解析excel

Node解析Excel表格


背景

最近项目中需要做国际化处理,翻译文件存在一个Excel表格中,前端国际化变量文件存在vars.js中,要一个个的从Excel中找感觉太愚了,因此想利用node简单写个脚本处理。

步骤

  1. 前端国际化文件如下,国际化是利用了requirejs的i18n实现的
    这里写图片描述
  2. Excel(test.xlsx)表格内容如下
    Node--解析excel_第1张图片
  3. 安装模块
npm install node-xlsx --save
  1. 简单代码
// app.js
let filePath = process.argv[2];// 获取Excel文件路径
let transferFile = {
    "save":"保存",
    "cancel":"取消",
    "loading":"加载中"
}; // 这里为了方便直接将国际化文件拷过来了
if(!filePath){
    console.log("filePath is null");
    return;
}
let xlsx = require("node-xlsx");// 加载node-xlsx模块
let sheets = xlsx.parse(filePath);// 解析Excel,sheets存的一个Excel页签
sheets.forEach(function(sheet){
    // 获取页签为web的页签数据
    if(sheet["name"] == "web"){
        for(var item in transferFile){
            for(var rowId in sheet["data"]){
                // 每一行数据
                var row = sheet['data'][rowId];
                // 第一行第一个单元格数据
                if(row[0] == transferFile[item]){
                    transferFile[item] = row[1];
                    break;
                }
            }
        }
    }
});
console.log(transferFile);
  1. 运行node app.js C:\Users\Administrator\Desktop\node\node_xlsx_parse\test.xlsx

总结

代码其实很简单都是调用第三方类库,关键是如何快速的了解第三方模块的使用。我自己比较喜欢的几种方式如下:

  • 百度一下,了解需要哪些模块,可以多看几个别人的博客。这里我们用到了process和node-xlsx模块。
  • 官网查询process模块和node-xlsx模块用法:
    这就是为什么参数要从索引2开始,因为 process.argv[0]是Node.js启动时传入的argv[0]参数值的一份只读副本。 process.argv[1]是当前执行的js文件路径。
    Node--解析excel_第2张图片
    node-xlsx的git说明文件中提供了读写的简单例子
    Node--解析excel_第3张图片
  • 调试,前面只能使我们大致了解实现的逻辑,估计官网好多api看的有点懵逼,而且有的翻译也是半懂半不懂,因此简单粗暴的方式是通过调试才能知道所以然(有时候脑袋阻塞,调试后就啥都明白了),我用的是VSCode。
    可以看到全局变量中有一个process对象,跟官网解释的一样,通过argv数组获取参数(这就是为什么是通过process.argv获取参数而不是点其他的)。
    Node--解析excel_第4张图片
    通过本地sheets 对象可以获取Excel表格相关的数据,接下来就是解析sheets对象了,有了它的数据结构再根据具体的业务逻辑去完善代码就可以了。
    Node--解析excel_第5张图片

代码完善

  • 翻译文件应该是要解析项目结构,通过fs模块读取文件到transferFile变量中。
  • 代码健壮处理,如没有row1咋办。
  • 将转换的文件输出到对应的英文(en)目录下,这样一个脚本就完善了些。

你可能感兴趣的:(Node,前端(js,mvvm),css)