如何使用应用程序脚本在 google sheet 中每三行数字插入两行

How to insert two rows for every three rows of number in google sheet using apps script

picture of add rows example

如图所示,A列有11行数字, 我想向其中添加行并使其显示为 D

列中的数字

你看,对于 A 中的每 3 行数字,我想在其上下添加一个新行,顶部的新行的值为“0”,底部的行的总和值为这三行数字 例如 前三行是1,2,3,它们的和是“1+2+3=6” 后面三行是4,5,6,总和是“4+5+6=15” 第三三行是7,8,9,求和为“7+8+9=24”如图 你会看到该列的最后一部分是“10 和 12”,它们是两行 (少于三行),但在这种情况下,它仍然需要添加两行,顶部一行为“0”,底部一行为总和“10+12=22”

现在,我写了两个for循环函数来插入行

function insertRows() {
         var ss = SpreadsheetApp.getActiveSpreadsheet();
         var sheet = ss.getSheetByName("sheet1");

         var numRows = SpreadsheetApp.getActiveSpreadsheet().getSheetByName ("sheet1").getLastRow();

         for (var i=1; i <= numRows+2; i+=4) {
              var addrow = sheet.insertRowsBefore(i,1);
              }

         }

  function insertRows2() {
        var ss = SpreadsheetApp.getActiveSpreadsheet();
        var sheet = ss.getSheetByName("sheet1");

        var numRows = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet1").getLastRow();

           for (var j=4; j <= numRows+2; j+=5) {
                var rowadd= sheet.insertRowsAfter(j,1)
                }
     }

"insertRows()"用于插入头行,"insertRows2()"用于插入底行, 到目前为止,这两个函数可以很好地在正确的位置插入行,但我不知道如何在循环中用“0”填充最上面的行以及如何填充每三行数字的总和值在底行。

你们知道如何用正确的值填充行吗?

这个示例脚本怎么样?我认为您的情况有几个答案。所以请将此视为其中之一。

流量:

  1. 从 sheet1 的 "A1:A11" 中检索值。
  2. 使用检索到的值,它为结果创建一个数组。
    • 首先,它将值分开,同时将 0 插入到顶部和末尾的总和。
    • 作为重要的一点,创建数组以将价差sheet作为二维数组。
  3. 将结果值放入 sheet1 的 "D1:19"。

示例脚本:

function insertRows() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("sheet1");
  var value = sheet.getRange(1, 1, sheet.getLastRow(), 1).getValues().filter(Number);
  var result = [];
  var temp = [[0]];
  var sum = 0;
  for (var i = 0; i < value.length; i++) {
    temp.push(value[i]);
    sum += value[i][0];
    if ((i + 1) % 3 == 0 || i == value.length - 1) {
      temp.push([sum]);
      result = result.concat(temp);
      temp = [[0]];
      sum = 0;
    }    
  }
  sheet.getRange(1, 4, result.length, 1).setValues(result);
}

注:

  • 当运行这个示例脚本时,sheet的最后一行被改变了。所以我用 filter()var value = sheet.getRange(1, 1, sheet.getLastRow(), 1).getValues().

如果这不是您想要的,请告诉我。我想修改我的答案。