实例2--拆分记录到表格
原数据

结果:


代码:
function test(){
var pah = ThisWorkbook.Path + "//";
var arr = Range("A2", Range("E999").End(xlUp)).Value();
var titarr = ["编号", "姓名", "部门", "籍贯", "基本工资"];
var m = new Map();
for (var ar of arr) {
if (m.has(ar[2])) {
var newarr = m.get(ar[2]).concat([ar]);//concat为合并数组;如: var newarr = m.get(财政局).concat([["GH00005","孙明","财政局",38,5695]])
Console.log(JSON.stringify("1."+newarr));
//因newarr是数组不是映射所以打印不显示索引
//打印第一次运行结果:"1.编号,姓名,部门,籍贯,基本工资,GH00001,李五,财政局,18,5651,GH00005,孙明,财政局,38,5695"
m.set(ar[2], newarr);//m.set(财政局, [["编号","姓名","部门","籍贯","基本工资"],[GH00001,李五,财政局,18,5651],["GH00005","孙明","财政局",38,5695]);
Console.log(JSON.stringify("2."+[...m.entries()]));
//打印第一次运行结果:"2.财政局,编号,姓名,部门,籍贯,基本工资,GH00001,李五,财政局,18,5651,GH00005,孙明,财政局,38,5695,民政局,编号,姓名,部门,籍贯,基本工资,GH00002,王六,民政局,23,5662,卫健局,编号,姓名,部门,籍贯,基本工资,GH00003,王九,卫健局,28,5673,残联,编号,姓名,部门,籍贯,基本工资,GH00004,孙小一,残联,33,5684"
} else {
// 如果不存在,则先在 Map 中创建该部门分组,并将表头作为首行,后跟当前记录
m.set(ar[2], [titarr, ar]);// 如:m.set(财政局, [["编号","姓名","部门","籍贯","基本工资"],[GH00001,李五,财政局,18,5651]])
Console.log(JSON.stringify("3."+[...m.entries()]));
//监视窗口:m=[1];Map/object
//打印第一次运行结果:"3.财政局,编号,姓名,部门,籍贯,基本工资,GH00001,李五,财政局,18,5651"
}
}
// 创建一个新的工作簿
var wb = Workbooks.Add();
for (var [key, val] of m.entries()){ // 对 Map 进行遍历
var ws = wb.Sheets.Add(); // 每次创建一个新的工作表
ws.Name = key;//当前部门名称 key
ws.Range("A1").Resize(val.length, 5).Value2 = val;
}
// 删除新工作簿默认多余的最后一个空工作表
wb.Sheets(wb.Sheets.Count).Delete();
// 保存新工作簿到指定路径,文件名为 "拆分结果.xlsx",保存后关闭工作簿
wb.SaveAs(`${pah}拆分结果.xlsm`);
wb.Close();
}
javascript
function test(){
var pah = ThisWorkbook.Path + "//";
var arr = Range("A2", Range("E999").End(xlUp)).Value();
var titarr = ["编号", "姓名", "部门", "籍贯", "基本工资"];
var m = new Map();
for (var ar of arr) {
if (m.has(ar[2])) {
var newarr = m.get(ar[2]).concat([ar]);//concat为合并数组;如: var newarr = m.get(财政局).concat([["GH00005","孙明","财政局",38,5695]])
Console.log(JSON.stringify("1."+newarr));
//因newarr是数组不是映射所以打印不显示索引
//打印第一次运行结果:"1.编号,姓名,部门,籍贯,基本工资,GH00001,李五,财政局,18,5651,GH00005,孙明,财政局,38,5695"
m.set(ar[2], newarr);//m.set(财政局, [["编号","姓名","部门","籍贯","基本工资"],[GH00001,李五,财政局,18,5651],["GH00005","孙明","财政局",38,5695]);
Console.log(JSON.stringify("2."+[...m.entries()]));
//打印第一次运行结果:"2.财政局,编号,姓名,部门,籍贯,基本工资,GH00001,李五,财政局,18,5651,GH00005,孙明,财政局,38,5695,民政局,编号,姓名,部门,籍贯,基本工资,GH00002,王六,民政局,23,5662,卫健局,编号,姓名,部门,籍贯,基本工资,GH00003,王九,卫健局,28,5673,残联,编号,姓名,部门,籍贯,基本工资,GH00004,孙小一,残联,33,5684"
} else {
// 如果不存在,则先在 Map 中创建该部门分组,并将表头作为首行,后跟当前记录
m.set(ar[2], [titarr, ar]);// 如:m.set(财政局, [["编号","姓名","部门","籍贯","基本工资"],[GH00001,李五,财政局,18,5651]])
Console.log(JSON.stringify("3."+[...m.entries()]));
//监视窗口:m=[1];Map/object
//打印第一次运行结果:"3.财政局,编号,姓名,部门,籍贯,基本工资,GH00001,李五,财政局,18,5651"
}
}
// 创建一个新的工作簿
var wb = Workbooks.Add();
for (var [key, val] of m.entries()){ // 对 Map 进行遍历
var ws = wb.Sheets.Add(); // 每次创建一个新的工作表
ws.Name = key;//当前部门名称 key
ws.Range("A1").Resize(val.length, 5).Value2 = val;
}
// 删除新工作簿默认多余的最后一个空工作表
wb.Sheets(wb.Sheets.Count).Delete();
// 保存新工作簿到指定路径,文件名为 "拆分结果.xlsx",保存后关闭工作簿
wb.SaveAs(`${pah}拆分结果.xlsm`);
wb.Close();
}