7-9 WPS JS宏 对象使用实例6:按条件读取多表再拆成多表

7-9 WPS JS宏 对象使用实例6:按条件读取多表再拆成多表

对象使用实例6:按条件读取多表再拆成多表

原数据:

结果:

代码:

function 跨表合并拆分() {

var mergedData = {}; //创建空对象

//获取所有表名

// var sheets = "1月", "2月", "3月"; //目标工作表名

//与上方代码功能同样,只是方法不同,仅供参考

//起点

var sheets = \[\];

for (var name1 of ThisWorkbook.Sheets){

sheets.push(name1.Name)

}

//结束

//数据分类排序

sheets.forEach(sheetName => {

var sheet = Sheets(sheetName);

var data = sheet.Range("A2:B" + sheet.Range("A1").End(xlDown).Row).Value();

data.forEach(row => {

var product = row0;

if (!mergedDataproduct) {

mergedDataproduct = \[\];

}

mergedDataproduct.push(sheetName, row\[1]);// 添加键:sheetName,值:row1月份数据

});

});

// 创建新工作簿写入数据

var newWb = Workbooks.Add();

Object.entries(mergedData).forEach((product, data) => {

var ws = newWb.Sheets.Add();

ws.Name = product;

ws.Range("A1","B1").Value2 = "月份", "销售额";

ws.Range("A2").Resize(data.length, 2).Value2 = data;

});

//删除无用表

newWb.Sheets("Sheet1").Delete();

//与上方代码功能同样,只是方法不同,仅供参考

//newWb.Sheets(newWb.Sheets.Count).Delete()

}

javascript 复制代码
//7-9 WPS JS宏 对象使用实例6:按条件读取多表再拆成多表
function 跨表合并拆分() {
  var mergedData = {};  //创建空对象
  
//获取所有表名
//  var sheets = ["1月", "2月", "3月"];  //目标工作表名
  //与上方代码功能同样,只是方法不同,仅供参考
//起点
  var sheets = []; 
  	for (var name1 of ThisWorkbook.Sheets){
		sheets.push(name1.Name)
	}
//结束
  
//数据分类排序
  sheets.forEach(sheetName => {
    var sheet = Sheets(sheetName);
    var data = sheet.Range("A2:B" + sheet.Range("A1").End(xlDown).Row).Value();
    
    data.forEach(row => {
      var product = row[0];
      if (!mergedData[product]) {
        mergedData[product] = [];
      }
      mergedData[product].push([sheetName, row[1]]);// 添加键:sheetName,值:row[1]月份数据
    });
  });

  // 创建新工作簿写入数据
  var newWb = Workbooks.Add();
  Object.entries(mergedData).forEach(([product, data]) => {
    var ws = newWb.Sheets.Add();
    ws.Name = product;
    ws.Range("A1","B1").Value2 = ["月份", "销售额"];
    ws.Range("A2").Resize(data.length, 2).Value2 = data;
  });
  
  //删除无用表
	newWb.Sheets("Sheet1").Delete();
	//与上方代码功能同样,只是方法不同,仅供参考
  //newWb.Sheets(newWb.Sheets.Count).Delete()
}
相关推荐
山河木马1 分钟前
矩阵专题3-怎么创建投影矩阵(uProjectionMatrix)
javascript·webgl·计算机图形学
天蓝色的鱼鱼1 小时前
关于 CSS 你可能不知道的属性,但关键时刻很有用
前端·css
泯泷2 小时前
第 2 篇:设计第一套字节码:Opcode、Instruction 与 Constant Pool
前端·javascript·安全
妙码生花2 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十五):优化细节、网络请求封装
前端·后端·ai编程
泯泷2 小时前
第 1 篇:从 1 + 2 开始:亲手写出第一台 JSVM
前端·javascript·安全
团团崽_七分甜2 小时前
Spring Boot 核心知识点总结
前端
lichenyang4532 小时前
从一个按钮开始,理解 ASCF 框架到底在做什么
前端
古夕2 小时前
第三方 SSO 接入实践:redirect_uri 编码、回调一致性与跨项目联调
前端·vue.js
朦胧之2 小时前
页面白屏卡住排查方法
前端·javascript
用户593608741402 小时前
Playwright 黑魔法:用 ClipboardEvent 绕过 React 富文本编辑器
前端