如何使用应用程序脚本在 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”填充最上面的行以及如何填充每三行数字的总和值在底行。
你们知道如何用正确的值填充行吗?
这个示例脚本怎么样?我认为您的情况有几个答案。所以请将此视为其中之一。
流量:
- 从 sheet1 的 "A1:A11" 中检索值。
- 使用检索到的值,它为结果创建一个数组。
- 首先,它将值分开,同时将
0
插入到顶部和末尾的总和。
- 作为重要的一点,创建数组以将价差sheet作为二维数组。
- 将结果值放入 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()
.
如果这不是您想要的,请告诉我。我想修改我的答案。
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”填充最上面的行以及如何填充每三行数字的总和值在底行。
你们知道如何用正确的值填充行吗?
这个示例脚本怎么样?我认为您的情况有几个答案。所以请将此视为其中之一。
流量:
- 从 sheet1 的 "A1:A11" 中检索值。
- 使用检索到的值,它为结果创建一个数组。
- 首先,它将值分开,同时将
0
插入到顶部和末尾的总和。 - 作为重要的一点,创建数组以将价差sheet作为二维数组。
- 首先,它将值分开,同时将
- 将结果值放入 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()
.
如果这不是您想要的,请告诉我。我想修改我的答案。