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 = 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()

}

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()
}
相关推荐
有意义2 小时前
现代 React 路由实践指南
前端·vue.js·react.js
三木檾2 小时前
Cookie 原理详解:Domain / Path / SameSite 一步错,生产环境直接翻车
前端·浏览器
-凌凌漆-2 小时前
【JS】JavaScript Promise
开发语言·javascript·ecmascript
开始学java2 小时前
踩坑实录:把 useRef 写进 JSX 后,我终于分清它和 useState 的核心差异
前端
二DUAN帝2 小时前
像素流与UE通信
前端·javascript·css·ue5·html·ue4·html5
1024小神2 小时前
cloudflare+hono框架实现jwtToken认证,并从token中拿到认证信息
前端
jinmo_C++2 小时前
从零开始学前端 · HTML 基础篇(二):常用文本标签与排版基础
前端·html
2501_944711432 小时前
A2UI : 以动态 UI 代替 LLM 文本输出的方案
开发语言·前端·ui
生活在一步步变好i2 小时前
前端加载优化核心知识点详解
前端