【问题标题】:Generate multiple rows of data based on 1 row input - Google Sheets根据 1 行输入生成多行数据 - Google 表格
【发布时间】:2017-09-21 03:36:02
【问题描述】:

我正在尝试在我的后端中的 Google 表格仪表板中创建一个自动化功能,以便我可以轻松地扩展我正在创建的某个报告。

基本上,我想根据在某个地方完成的 1 行输入生成多行数据。这基本上是关于每月或每季度重复的经常性收入和经常性费用。所以多行的生成应该基于“经常性月份时间”、“经常性收入”和“经常性费用”。最主要的是在这里也添加日期 - 通过它不断重复的时间量。循环和重复应该一直持续到 2019-2020 等确定的日期。(比如 2019 年 1 月 1 日)

下面的详细示例,输入表由个人完成 - 而输出表由脚本、代码和公式自动生成


希望这能清楚地解释我的问题陈述。我认为我们将不得不在这里使用“Google Apps 脚本”从输入语句创建循环。

我们将不胜感激任何解决此问题的方法和帮助。

【问题讨论】:

    标签: google-apps-script google-sheets recurring-events


    【解决方案1】:

    这是一些代码,它应该可以解决问题。

    function generateReccuringExpenses(){
    
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var inputSheet = ss.getSheetByName("Input Table");
      var outputSheet = ss.getSheetByName("Output Table");
      var endYear = 2020;
    
      // We considere your data to be on a sheet with a header, starting on A1 cell
      var data = inputSheet.getRange(2, 1, inputSheet.getLastRow()-1, inputSheet.getLastColumn()).getValues();
    
      for(var i = 0; i < data.length; i++){
    
        var row = data[i];
    
        if(row[3] > 0){
    
          var elements = new Array();
          var d = new Date(row[0]);
    
          while(d.getFullYear() < endYear){
    
            var test = d.getFullYear();
            var month = d.getMonth() +1;
            var dateString = month+"/"+d.getDate()+"/"+d.getFullYear();
            var newRow = [dateString, row[1],row[2]];
            elements.push(newRow);
    
            var n = d.getMonth() + row[3];
    
            if(n > 11){
    
              d.setMonth(n -11);
              d.setYear(d.getYear() + 1);
    
            }
            else{
    
              d.setMonth(n);
    
            }
    
          }
    
          var outputRange = outputSheet.getRange(outputSheet.getLastRow()+1, 1, elements.length, outputSheet.getLastColumn());
          outputRange.setValues(elements);
    
        }
    
      }
    
      var range = outputSheet.getRange(2, 1, outputSheet.getLastRow()+1, outputSheet.getLastColumn());
      range.sort(1); // Sort by date (column 1)
    
    }
    

    您可以使用 Range.sort() 方法或电子表格工具对结果进行排序。

    【讨论】:

    • 非常感谢皮埃尔 - 它成功了!很快 - 是否可以更改输入表和输出表的位置,如 B20、E20 等?如果是 - 哪个功能。 (这个 api 的初学者!)
    • 在上面的代码中,我使用的是Sheet.getRange(startRow, startCol, numRows, numCols)方法,但是你可以使用Sheet.getRange(A1notation)方法
    • 再次感谢,将对此进行探索。另外,我想实际设置它,以便在输入表中添加新行后,此函数会删除所有现有数据并用多行的所有新数据等替换它。或者我应该的任何方法/方向接受这一点 - 会非常有帮助!
    • 你可以看看onEdit(e) trigger,当你编辑你的工作表时,他会执行一些代码。
    猜你喜欢
    • 1970-01-01
    • 2012-09-01
    • 2016-02-11
    • 2016-05-14
    • 1970-01-01
    • 2012-04-26
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多