nodejs 的魔法之 fs 模板
好久没有更新博客了,最近事真多,手头上又有外包项目,又有公司的项目,过段时间会出一个d3的总结,现在公司使用的就是d3描绘地图,记录一下踩过的坑和注意事项。前端时间为了学习node做了一个博客的后台,那会是第一次感受到了node的魅力,第一次使用是在做地图这个项目的时候,要处理大量的数据,都是一些重复性的操作,后来突然想到了nodefs模板,当时心就痒痒的,然后就试着跑了一段node。读出文件中的数据,然后再对数据处理,最后再把数据写入文件中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/*
精简 world.json
生成的 world_m.json 只保留当前国家的名字
*/

const fs = require("fs");

fs.readFile("./../data/originData/world.json", function(err, data) {
if (err) {
return console.error(err);
}
//这里转换一下这样在命令行才可以看到数据
const countrys = JSON.parse(data.toString());
//可以随时打印一下看看数据格式
//console.log(countrys); return;
var type,
geometry = {},
properties = {};
data = {
type: "FeatureCollection",
features: []
};
//遍历数据获取自己想要属性
countrys.features.map(val => {
type = val.type;
geometry = val.geometry;
properties = val.properties.NAME_LONG;
data.features.push({
type: type,
properties: { name: properties },
geometry: geometry
});
});
//写入文件这里是同步写入
fs.writeFile(
"./../data/world_m.json",
JSON.stringify(data),
{ encoding: "utf8" },
function(err) {
if (err) {
console.error(err);
} else {
console.log("文件写入成功");
}
}
);
});

当时,第一次打开world_m.json的时候浑身上下特别的通透,我好像掌握了什么了不得的技能,可能对后端来说这不是什么难事,但对于我一个前端来说,做到这真真是感受到了代码的魅力。紧随其后又存生成的 world_m.json 数据里面提取出与中国接壤的数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/*
从 world_m.json 世界地图数据中 提取出与中国接壤的国家的数据
并生成 other.json 文件
*/
const fs = require("fs");

fs.readFile("./../data/world_m.json", function(err, data) {
if (err) {
return console.error(err);
}
const countrys = JSON.parse(data.toString());
//console.log(countrys); return;
var type,
geometry = {},
properties = {},
data = {
type: "FeatureCollection",
features: []
},
countryName = [
"Afghanistan",
"Bhutan",
"Dem. Rep. Korea",
"Iran",
"Japan",
"Kazakhstan",
"Kyrgyzstan",
"Lao PDR",
"Mongolia",
"Myanmar",
"Nepal",
"Pakistan",
"Tajikistan",
"Thailand",
"Turkmenistan",
"Uzbekistan",
"Vietnam",
"India",
"Russian Federation",
"Republic of Korea"
]; //要提取的国家的名字

countrys.features.map(val => {
if (countryName.indexOf(val.properties.name) >= 0) {
console.log(val.properties.name);
type = val.type;
geometry = val.geometry;
properties = val.properties.name;
data.features.push({
type: type,
properties: { name: properties },
geometry: geometry
});
}
});
fs.writeFile(
`./../data/other.json`,
JSON.stringify(data),
{ encoding: "utf8" },
function(err) {
if (err) {
console.error(err);
} else {
console.log("文件写入成功: " + countryName);
}
}
);
});

第一次觉得数据处理这么有趣,也是第一次发现代码离我们这么近,昨天晚上帮我对象做 Excel 表格数据处理的时候,心血来潮我能不能用 node 读取表格中的数据,然后对数据处理好后,再写入表格中,这样就不用一个个的复制粘贴了,说干就干,网上招了个入门简单的node-xlsx插件,然后就开始了。。。,悲剧的是,有时候真的 Excel 表格的功能真的是很强大,它有去重,有排序的功能,所以我只要把数据对应的找出来然后生成表格复制到原来的表格中,使用人家自带的功能三俩下就出来了,偏偏自己走了弯路非要把没有对应的数据也要提出来,唉。。。以后再处理表格数据的时候就知道了,一些没必要代码做的东西,尽量不用。。。

node-xlsx

这个插件主要就是俩个功能,一个读取表格数据,还有一个就是写入表格数据。上手容易。

读取表格

1
2
3
4
const xlsx = require("node-xlsx");
const fs = require("fs");

var list = xlsx.parse("./../data/myData/1.xlsx")[0].data;

读取的结果是一个大的数组,如果你的一个xlsx文件里有多个表格的话,那么就会以数组的形式读取出来

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[
{
name: "sheet1", //表格一的名字
data: [
//每一行的数据,包括表头
//如果需要空几个单元格,赋值的时候直接 data[数组下标隔开几个]
//然后在生成表格的时候就会自动空开单元格
//时间的话也完全不需要转,表格中的设置单元格式就可以转过来
]
},
{
name: "sheet2", //表格二的名字
data: []
}
];

写入表格

直接fs.writeFile写入的话是不会生成表格的。

1
2
3
4
5
6
7
8
9
10
11
12
13
var buffer = xlsx.build([
{
name: "sheet1",
data: origin //写入数据
}
]);
fs.writeFile("./result.xlsx", buffer, function(err) {
if (err) {
console.log(err);
} else {
console.log("导出成功");
}
});

好像是掌握了了不得的技能呢。。。哈哈,程序路漫漫呐