javascript - 如何将行添加到 3D 数组 Array Google App 脚本
问题描述
我有一些包含三列(PO、SKU、单位)的数据。我已经按 SKU 对这个数组进行了排序。数据如下图所示
我想在每组 SKU 之间添加一个空白行,以使其更易于阅读,并可能在以后添加总计。例如,在最后一个 AL-STSTCHOPPER 记录之后和第一个 CE-12-SLOT-WOOD-WATCH-DARK 记录之前,需要有一个间隙。我试过使用 for 循环来做到这一点,但没有运气。我认为有一个更简单的方法,但不确定它可能是什么。我为此拥有的代码如下:
var activeSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SheetName");
var orderLog = SpreadsheetApp.openByUrl("URL").getSheetByName("Order Details");
var orderSort = orderLog.getRange(3, 1, orderLog.getLastRow(), 3).getValues().
sort(function(r1,r2){
var a = r1[1];
var b = r2[1];
if(a>b){
return 1;
}else if (a<b){
return -1;}
return 0;
});
Logger.log(orderSort);
解决方案
- 您可以使用循环添加空白行:
function whitespace() {
var ss = SpreadsheetApp.getActive(); // SpreadsheetApp.open...
var sheet = ss.getActiveSheet(); //ss.getSheetByName('sheetName');
var lastRow = sheet.getLastRow();
sheet
.getRange(1, 2, lastRow)
.getValues()
.reverse()
.forEach(function(row, i, all){
if(all.length > (i+1) && row[0] && all[i+1][0] && row[0] != all[i+1][0]) sheet.insertRowBefore(lastRow - i);
});
}
- 您可以通过读取和写入数组来做到这一点:
function whitespace2() {
var ss = SpreadsheetApp.getActive();
var sheet = ss.getActiveSheet();
var lastRow = sheet.getLastRow();
var arr = [];
sheet
.getRange(1, 1, lastRow, 3)
.getValues()
.forEach(function(row, i, all){
if(all.length > (i+1) && row[1] && all[i+1][1] && row[1] != all[i+1][1]) {
arr.push(row);
arr.push(['','','']);
}
else arr.push(row);
});
sheet
.getRange(1, 1, arr.length, 3)
.setValues(arr);
}
推荐阅读
- python - 如何在多个索引上使用 python elasticseach 模块进行查询?
- node.js - 使用 AWS API Gateway 和 Lambda 从 S3 上传和检索图像
- php - 通过增加成本对 WooCommerce 运输选项进行排序,最后免费送货
- c# - 为类存储对象的有效方法是什么?
- java - 如何在 java jdbc 中设置图像的数据类型
- jaxb - JAXB 解组对象并添加原始 xml
- javascript - 如何通过ajax刷新highcharts(饼图)数据
- javascript - 使用reduce和递归从路径数组到对象
- c++ - 二进制搜索不收敛双重
- asp.net-core - ASP.NET Core 3.1 静态文件无法访问