Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 如何在GoogleSheets中的列中插入每N行有值的单元格_Google Apps Script_Google Sheets_Google Sheets Formula_Array Formulas_Google Sheets Query - Fatal编程技术网

Google apps script 如何在GoogleSheets中的列中插入每N行有值的单元格

Google apps script 如何在GoogleSheets中的列中插入每N行有值的单元格,google-apps-script,google-sheets,google-sheets-formula,array-formulas,google-sheets-query,Google Apps Script,Google Sheets,Google Sheets Formula,Array Formulas,Google Sheets Query,列中有一个连续列表数组形式的不同值列表。 我们需要通过在它们之间插入一些文本,将它们分组并在另一列中每隔第n行第7行分开。不是一整排。只是一间牢房。因此,它们将被推下立柱 到目前为止,我已经尝试并成功地通过使用一个简单的查询获得了所需的结果: 不过我想知道。是否有一种更优雅、更通用的方法使用公式或脚本。我建议您使用以下基于应用程序脚本的解决方案: 工作流程: 将感兴趣的列的内容推送到数组中 每递增一次,插入一个包含内容的附加条目 将数组转换为[column][row]语法 将值插入到目标列中

列中有一个连续列表数组形式的不同值列表。 我们需要通过在它们之间插入一些文本,将它们分组并在另一列中每隔第n行第7行分开。不是一整排。只是一间牢房。因此,它们将被推下立柱

到目前为止,我已经尝试并成功地通过使用一个简单的查询获得了所需的结果:

不过我想知道。是否有一种更优雅、更通用的方法使用公式或脚本。

我建议您使用以下基于应用程序脚本的解决方案: 工作流程:

将感兴趣的列的内容推送到数组中 每递增一次,插入一个包含内容的附加条目 将数组转换为[column][row]语法 将值插入到目标列中 参考资料:

您可以使用每N行插入一个数组:

/** *每N行插入一个字符串 * *@customfunction *@param{Object[][]}arr输入列 *@param{number}每插入第n行 *@param{string}str要插入的字符串 */ 函数insertTextarr,every,str{ 对于 var i=0,j=0; iconsole.loginsertTextarr,7,“组”;是否要在每7个现有条目后插入B列中包含一些文本的单元格?或者要将值从B列复制到C列,从而在每7个条目之间插入一个附加单元格?@ziganotschka是。在本例中,有7个现有条目。但是对于一个扩展列,它包含了相当多的条目。也不仅仅是现有的7个条目。另一个时间可能是5或9或。。。。请注意文本末尾的递增值以及组01我对如何剪切集群并使其动态化而不必显式写入每个集群感到困惑。编写脚本将值从列B推送到数组中很容易,每7个或任何其他固定数字条目插入一个附加条目,并将整个结果传递到C列。但是,如果同一列中的增量值不总是相同的,脚本如何知道在哪里应用哪个间隔?它总是相同的。我是说换一次。效果几乎完美。只有一个问题。虽然在我们的例子中,它应该停止在第4组,但它至少在最后添加了一个额外的组和几行。如果我们改变增量/步骤,例如5,它会增加更多。一个很好的增强是,如果它可以变成一个函数,如=insertcell1,2,7,并带有相应的变量row、column、destination,这样就不必进入脚本编辑器,只需在单元格中编写函数……函数如=insertcell1,2,7,并带有相应的变量row、column、destination。仔细想想,可变的目的地是毫无意义的。它将是函数所在单元格的地址。不过,如果有一个选项(1或0)来决定是否在列Group1的最顶端显示第一个,那就太好了。因此,如果脚本添加额外的行,则可能是=insertcell2,7,0在感兴趣的列中的最后一个条目之后,工作表中可能有额外的空单元格,而不是var lastRow=sheet.getLastRow;您可以定义var lastRow=sheet.getRangefirstRow,column.getNextDataCellSpreadsheetApp.Direction.DOWN.getRow;为了不打开脚本编辑器,您可以将脚本作为宏运行。只需转到工具->宏->导入,并将该功能添加到宏列表中。否则,您也可以按照上面的建议重写脚本。我的答案中的参考资料应该可以帮助您根据您的需要调整示例脚本。谢谢您的建议。这难道不意味着应该逐个输入具体的值吗?我正在寻找使用变量的更一般的方法。还有其他建议吗?比如,你甚至不必弄乱脚本,只要在工作表上键入一个函数,比如=insertcell2,7,0。@mari你至少应该尝试创建自己的自定义函数。如果有,您会意识到这是一个自定义函数=插入文本A2:A15,7,组谢谢您的提醒。以及教育性的负面评论。这让我有机会回忆起那段往事。@mari我不确定我是否了解其中的关联性。

+------+-----------+-----------+
|      |   Col2    |  Col3     |
+------+-----------+-----------+
|    1 | Sunday    | Group 01  |
|    2 | Monday    | Sunday    |
|    3 | Tuesday   | Monday    |
|    4 | Wednesday | Tuesday   |
|    5 | Thursday  | Wednesday |
|    6 | Friday    | Thursday  |
|    7 | Saturday  | Friday    |
|    8 | 10        | Saturday  |
|    9 | 20        | Group 02  |
|   10 | 30        | 10        |
|   11 | 40        | 20        |
|   12 | 50        | 30        |
|   13 | 60        | 40        |
|   14 | 70        | 50        |
|   15 | MERCURY   | 60        |
|   16 | MARS      | 70        |
|   17 | JUPITER   | Group 03  |
|   18 | VENUS     | MERCURY   |
|   19 | SATURN    | MARS      |
|   20 | EARTH     | JUPITER   |
|   21 | NEPTUNE   | VENUS     |
|   22 | Mary      | SATURN    |
|   23 | John      | EARTH     |
|   24 | Paul      | NEPTUNE   |
|   25 | Ann       | Group 04  |
|   26 | ...       | Mary      |
|   27 | ...       | John      |
|   28 |           | Paul      |
|   29 |           | Ann       |
|   30 |           |           |
|   31 |           |           |
|   32 |           |           |
|   33 |           |           |
+------+-----------+-----------+
=QUERY(({"***Group";B1:B7;"***Group";B8:B14;"***Group";B15:B21;"***Group";B22:B25;}),"SELECT *")
function myFunction() {
  var sheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var firstRow=1;
  var column=2;
  var destColumn=3;
  var increment=7;
  var lastRow=sheet.getLastRow();
  var values=sheet.getRange(firstRow, column, lastRow,1).getValues();
  var array=[];
  var k=1;
  Logger.log(lastRow);
  for(var i=0;i<lastRow;i++){
    if(i%increment==0){
      array.push("Group "+k);
      k++;
    }
     array.push(values[i][0]);
  }
  var outerArray = [];
  for(var j=0;j<array.length;j++){
    var tempArray = [];
    tempArray.push(array[j]);
    Logger.log(array[j]);
    Logger.log(tempArray);
    outerArray.push(tempArray);
  }
  sheet.getRange(1, destColumn, array.length, 1).setValues(outerArray);
}