【问题标题】:Autofilling a spreadsheet column自动填充电子表格列
【发布时间】:2020-07-28 00:44:45
【问题描述】:

我正在尝试创建一个函数,该函数将向下复制列中的最后一个值,直到它遇到另一列的最后一个值。下面是输入的样子:

我希望脚本在 F 列(列中的最后一个值)中找到“Peach”并将其复制到 G 列中的最后一个单元格。每天都会添加新值,这就是为什么我可以'不要使用绝对引用。这就是我希望输出的样子:

这是我当前(不起作用)的代码:

function CopyDown(){
   //Total length of column G
   var spreadsheet = SpreadsheetApp.openById(WORKSHEETID);
   var sheet = spreadsheet.getSheetByName("Approval");
   var endRow = spreadsheet.getRange("G:G").getLastRow()

   //Getting last data in column F
   var currentRow = spreadsheet.getRange("F:F").getLastRow()
   var oneRowCopy = sheet.getRange(currentRow,6);

   //Copying down
   var targetRows = sheet.getRange(currentRow+1,6,endRow, 1);
   oneRowCopy.copyTo(targetRows);

 };

谁能解释一下如何让这段代码发挥作用?

【问题讨论】:

    标签: javascript google-apps-script google-sheets


    【解决方案1】:

    用 F 中的最后一行填充 F 中的空单元格,使 F 列和 G 列高度相同。

    function CopyDown(){
      const ss=SpreadsheetApp.getActive()
      const sh=ss.getSheetByName("Sheet1");//Modified sheet name
      const glr=getColumnHeight(7,sh,ss);//last row in G
      const flr=getColumnHeight(6,sh,ss);//last row in F
      const flv=sh.getRange(flr,6).getValue();//last value in F
      const fbrg=sh.getRange(flr+1,6,glr-flr,1);//empty range in F
      const bA=fbrg.getValues();//empty values in F
      bA.forEach(function(r){r[0]=flv});//fill empty values with f last value
      fbrg.setValues(bA);//copy values all at one time
    }
    

    辅助函数:

    function getColumnHeight(col,sh,ss){
      var ss=ss||SpreadsheetApp.getActive();
      var sh=sh||ss.getActiveSheet();
      var col=col||sh.getActiveCell().getColumn();
      const rcA=sh.getRange(1,col,sh.getLastRow(),1).getValues().reverse()
      let s=0;
      for(let i=0;i<rcA.length;i++) {
        if(rcA[i][0].toString().length==0) {
          s++;
        }else{
          break;
        }
      }
      return rcA.length-s;
    }
    

    【讨论】:

      【解决方案2】:

      您能否展示 SpreadSheetApp 类/变量,以便我了解它是如何工作的?

      如何找到准确的值:

      const list = ["one", "two", "three"];
      const index = list.indexOf("two"); //1, because arrays start with the index of 0
      

      如何查找是否包含:

      const list = ["apple", "banana", "pear"];
      const index = list.indexOf(list.find(e => e.includes("app"))); //0, because "apple" includes "app"
      

      在您的情况下,您需要找到索引。因此,用 F 列的元素制作一个列表。 使用我上面显示的方法之一搜索它。然后,执行这样的 for 循环:

      for (var i = index; i < /*column G length*/; i++) {
      columnG[i].text = "Peach"; //I don't really know how it really works, sorry. Make it how you would change the text.
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多