node解析Excel,将表格数据制成json,针对合并的单元格该如何实现?
发布于 8 年前 作者 SHocker-Yu 7804 次浏览 来自 问答

这是我用的包js-xlsx

这是测试表格: 1.png

这是最后需要的json格式:

[ { “Nuber”: 1, “Department”: “part1”, “Unit”: [“check”,“second”,“cable”], “BeginTime”: “1/7:00”, “EndTime”: “2/20:00”, “Worker”: [“Lucy”,“Jussa”,“Peter”] }, { “Nuber”: 2, “Department”: “part2”, “Unit”: “check”, “BeginTime”: “1/7:00”, “EndTime”: “1/20:00”, “Worker”: “Yu” } ]

问题:如何实现将Unit和Worker中的内容组成一个数组并塞进Number为1的json中?

这是目前的代码:

var XLSX = require(‘xlsx’); var workbook = XLSX.readFile(‘测试.xlsx’); var sheet_name_list = workbook.SheetNames; sheet_name_list.forEach(function(y) { var worksheet = workbook.Sheets[y]; if (y == ‘Sheet1’) { var headers = {}; var data = []; //包中定义:z就是单元格的编号,如:A1,B2 for (z in worksheet) { if (z[0] === ‘!’) continue; //(0,1)列col的字母编号:A-Z, (1)行数row:1、2、3… var col = z.substring(0, 1); var row = parseInt(z.substring(1)); var value = worksheet[z].v; //保存中文字段名 if (row == 4) { headers[col] = value; continue; }

		if (!data[row]) data[row] = {};
		data[row][headers[col]] = value;
	}
	data.shift();
	data.shift();
	console.log(data);

} else { console.log(false) }

});

目前代码实现结果:

2.png

10 回复

有人有思路吗?

泪流满面啊,终于看到一个遇到一样问题的, 思路一,拆分单元格,在填充空值,2步完成 思路二,重头到尾,遍历这个二维数组,填满它, 1,找出数组的大小,arr[x][y] ,x已知,遍历出y

  1. 建一个上述大小的数组 arr[x][y] ,把已有的数据插进去
  2. 遍历的到的数组,添充空值 arr[x][y]=arr[x][y-1] 得到你要的数组

@bqxu 听说过csv这种格式吗。。。可以抄微软啊 为啥要用json呢。。。

untitled1.png

1,2,3,4,5,6
1,2,3,4,5,6
1,2,,,5,6
1,,,,5,6
1,,,,5,6
1,,,,5,6
1,,,,5,6
1,2,3,4,5,6
1,2,3,4,5,6
1,2,3,4,5,6

@bqxu 哈哈,我刚要上来写解法,还以为没人回了呢,感谢回复,顺便握爪,只有解这种表的人才知道痛苦啊!!真实数据是17个字段,17啊,其中15个字段可能为空或有值! 我是跟思路一有些类似,合并后的单元格只有一行有值,于是加个判断,如果剩下的行数没值,就将前一个单元格的值赋给空单元格,然后再根据这个相同的属性判断是父子元素,再做剩下的json数组操作

@CarlosRen 一开始就是准备弄个json给前端用的,csv也没有接触过所以没考虑过,我去看看

@CarlosRen 用过csv ,不过还是习惯json,😁

@bqxu 我已经用这个库经历了两个项目了 , 还是很方便的, 有些东西自己也可以设置,修改他的库文件

@NextZeus 不错哦,我看看要不要替换

回到顶部