concat合并的数组会有顺序么_WPS 多表格快速横向合并

上一篇文章介绍了如何对多个表格进行纵向合并(各表格栏目相同),本篇文章介绍如何快速进行横向合并(各表格栏目不同)。

数据如下:

成绩表一:

87859cd96a897d7855995cb58646da73.png

成绩表二:

78deb2f743885d4155277bba7b9afd3c.png

成绩表三:

87eebea1abdd3854399a4f22d8cb998a.png

要把所有科目的成绩合并到一个表,如下:

02f6a374075bed4e9b736a288f533681.png

要如何做呢?注意到各个表格的姓名栏顺序未必是一致的,不能简单的把各表的数据直接复制到汇总表。

看代码:

2848a863af9b5bfe0368be8c4443df34.png

var app = GetObject('', 'KET.Application')

var sheets = app.ActiveWorkbook.Sheets

var arr = {}; //arr用于保存合并的数据

var range = sheets(1).UsedRange; //取得第一个表的数据区

var titles = range.Rows(1).Value.toArray(); //将第一个表的所有标题保存到titles数组

for (var row = 2; row <= range.Rows.Count; row++) {

//将第二行起的数据以姓名为key保存到一个对象得到

arr[range.Cells(row, 1).Value] = range.Rows(row).Value.toArray();

}

/*arr = {

name1: [name1, 分数1, 分数2, ...],

name2: [name2, 分数1, 分数2, ...],

}

*/

for (var i = 2; i <= sheets.Count - 1; i++) {

range = sheets(i).UsedRange;

//把其余各表标题栏追加到titles

titles = titles.concat(range.Rows(1).Value.toArray().slice(1));

for (var row = 2; row <= range.Rows.Count; row++) {

//把其余各表的数据追加到arr, 每行的第1格不追加

arr[range.Cells(row, 1).Value] = arr[range.Cells(row, 1).Value].concat(range.Rows(row).Value.toArray().slice(1));

}

}

var sheet = sheets("汇总表");

//设置表头

sheet.Range(sheet.Cells(1, 1), sheet.Cells(1, titles.length)).Value = arrayToSafeArray(titles);

var row = 2;

//根据姓名,逐行增加成绩

arr.keys().forEach(function(key) {

sheet.Range(sheet.Cells(row, 1), sheet.Cells(row, titles.length)).Value = arrayToSafeArray(arr[key]);

row++;

})

把脚本在万能脚本工具中打开执行即可得到

241e16f7f04ad44c1d387ea3eaee49ae.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值