6-13 WPS JS宏 Map实例2--拆分记录到表格

实例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(ar2)) {

var newarr = m.get(ar2).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(ar2, 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(ar2, 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();
}
相关推荐
To_OC11 小时前
LC 42 接雨水:暴力超时卡半天?前后缀数组一用就通了
javascript·算法·leetcode
小林ixn11 小时前
从 ??= 到 onKeyDown:一个 React 组件的“自我修养”
前端·javascript·react.js
এ慕ོ冬℘゜12 小时前
前端实战:jQuery 多条件联合搜索(标题模糊查询 + 日历时间段筛选)
前端·javascript·jquery
随心点儿12 小时前
js postMessage 实现跨域发送消息-应用示例
javascript·ecmascript·postmessage
kyriewen14 小时前
我让AI改一个bug——它偷偷动了5个我没让它碰的地方
前端·javascript·ai编程
gis开发之家18 小时前
《Vue3 从入门到大神35篇》Vue3 源码详解(五):effect 依赖收集原理——track 与 trigger 是如何工作的?
javascript·typescript·前端框架·vue3·vue3源码
橘子星19 小时前
我一个前端切图仔,凭什么能在浏览器里跑大模型?
前端·javascript·前端框架
半个落月20 小时前
用 LangChain JS 做可控写作实验:理解温度参数、提示词与异步调用
javascript·人工智能·后端
观远数据20 小时前
Excel到数据资产池:文件数据入湖的治理规范怎么建
前端·javascript·excel
CoderWeen20 小时前
我写了个能一步步点着看的 Dijkstra 可视化项目(Vue3 + Leaflet + Generator)
前端·javascript·vue.js