【问题标题】:Duplicate Rows in Google Spreadsheet based on Value基于值的 Google 电子表格中的重复行
【发布时间】:2014-10-13 08:16:50
【问题描述】:

我正在尝试以编程方式复制 Google 电子表格中的行。我希望该行被复制的次数基于该行本身的值之一。

例如,假设我有一个这样的表:

您可以看到C列中有数字。C列中的值是我想复制该行的次数。这就是期望的结果:

从技术上讲,如果 C 列中的值为 3,我们将复制该行两次。

任何关于如何编写 Google 电子表格脚本来执行此操作的想法都很棒!

谢谢!

【问题讨论】:

    标签: google-apps-script google-sheets google-spreadsheet-api


    【解决方案1】:

    这相当简单,您应该自己尝试过。我敢肯定,当您阅读下面的代码时,您会说“哦,当然,我本来可以轻松完成的”……对吧?

    function autoDup() {
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
      var data = sheet.getDataRange().getValues();
      var newData = [];
      for(var n in data){
        newData.push(data[n]);
        if(!Number(data[n][2])){continue};// if column 3 is not a number then do nothing
        for(var c=1 ; c < Number(data[n][2]) ; c++){ // start from 1 instead of 0 because we have already 1 copy
          newData.push(data[n]);//store values
        }
      }
      sheet.getRange(1,1,newData.length,newData[0].length).setValues(newData);// write new data to sheet, overwriting old data
    }
    

    【讨论】:

    • Serge,一如既往的好回应!
    • 非常干净简洁!我对你的期望一点也不低!我建议添加的唯一一件事是对新数据范围进行排序......例如var newData = sheet.getRange(1,1,newData.length,newData[0].length).setValues(newData); newData.sort({column: 1, 升序: false}); // 与示例中第 1 列的降序内联。
    • @Cyrus Loree-感谢您的客气话。我认为脚本不会改变数据顺序……是什么让你认为它会改变?
    • 顺便说一句,由于您使用的排序方法是 range 方法,您可以像这样链接它:sheet.getRange(1,1,newData.length,newData[0].length).setValues(newData).sort({column: 1, ascending: false});
    【解决方案2】:

    假设您的输入在 inSheet 上,您可以在不同的工作表上放置以下公式 =transpose(split(arrayformula(textjoin(",",false,iferror(rept(inSheet!A1:A&amp;",",inSheet!$C1:$C)))),",")) 并将其向右拖动两次即可完成。 这可以防弹以处理空单元格或逗号或重复值为 0 的单元格,但对于像上面这样好的数据,它可以按原样工作。

    【讨论】:

      猜你喜欢
      • 2020-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-16
      相关资源
      最近更新 更多