首页 > 解决方案 > 如何将行添加到 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);

标签: javascriptarraysgoogle-apps-script

解决方案


  1. 您可以使用循环添加空白行:
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);
      });
    }

  1. 您可以通过读取和写入数组来做到这一点:
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);
}

推荐阅读