【问题标题】:Need to Set_Formula on Insert_Row from IFTTT需要在 IFTTT 的 Insert_Row 上设置_Formula
【发布时间】:2017-04-07 17:40:17
【问题描述】:

这里是 Google Apps 脚本新手,

我有一个 IFTTT 小程序,它通过电子邮件向此电子表格添加一行:Data Test

我似乎正确设置了公式,但是当添加新行时,公式显然不会自动填充到该新行中。当插入一行时,其中 A 列和 B 列中的相应单元格不为空,我想在该行中设置某些公式。

到目前为止,我的脚本(见下文)确实给了我想要的公式,但只在第 1 行。 我希望脚本将这些相同的公式设置到插入的任何新行的相应单元格中。

例如,IFTTT.com 自动化将使用文本填充单元格 A6 和 B6(即链接电子表格中的下一个空白行)——我需要将当前输入的所有公式应用于 B6(而不是 B2)

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];

  var cell = sheet.getRange("C1");
  cell.setFormula('=IFERROR(MID($B2,SEARCH("details",$B2)+7,SEARCH(",",$B2)-SEARCH("details",$B2)-7),HYPERLINK("https://housing.sfgov.org/listings","See Housing Portal"))');
  var cell = sheet.getRange("D1");
  cell.setFormula('=IFERROR(TRIM(LEFT(SUBSTITUTE(MID(B2,FIND("$",B2),LEN(B2))," ",REPT(" ",100)),100)),HYPERLINK("https://housing.sfgov.org/listings","See Housing Portal"))');
  var cell = sheet.getRange("E1");
  cell.setFormula('=IFERROR(MID($B2,SEARCH("exceed",$B2)+7,SEARCH("%",$B2)-SEARCH("exceed",$B2)-6),HYPERLINK("https://housing.sfgov.org/listings","See Housing Portal"))');
  var cell = sheet.getRange("F1");
  cell.setFormula('=IFERROR(MID($B2,SEARCH("due",$B2)+3,SEARCH(";",$B2)-SEARCH("due",$B2)-3),HYPERLINK("https://housing.sfgov.org/listings","See Housing Portal"))');
  var cell = sheet.getRange("G1");
  cell.setFormula('=IFERROR(MID($B2,SEARCH("held on",$B2)+7,SEARCH(". Lottery",$B2)-SEARCH("held on",$B2)-7),HYPERLINK("https://housing.sfgov.org/listings","See Housing Portal"))');
  var cell = sheet.getRange("H1");
  cell.setFormula('=IFERROR(MID($B2,SEARCH("posted by",$B2)+9,SEARCH(". ",$B2)-SEARCH("",$B2)-167),HYPERLINK("https://housing.sfgov.org/listings","See Housing Portal"))');

}

任何帮助将不胜感激!

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    试试这个:

    var ss = SpreadsheetApp.getActiveSpreadsheet();
    function onOpen() {
      var items = [
        {name: 'Add Row', functionName: 'addrow'},
      ];
        ss.addMenu('Add Row', items);
        }
          
    function addrow() {
      var ui = SpreadsheetApp.getUi(); 
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = ss.getSheets()[0];
      var result = ui.prompt(
          'Enter number of Row',
          ui.ButtonSet.OK_CANCEL);
    
        // Process the user's response.
      var button = result.getSelectedButton();
      var rownum = result.getResponseText();
      if (button == ui.Button.OK) {
        // User clicked "OK".
      sheet.insertRowAfter(rownum);
      var cell = sheet.getRange("C" + rownum);
      cell.setFormula('=IFERROR(MID($B' + rownum +',SEARCH("details",$B' + rownum +')+7,SEARCH(",",$B' + rownum +')-SEARCH("details",$B' + rownum +')-7),HYPERLINK("https://housing.sfgov.org/listings","See Housing Portal"))');
      var cell = sheet.getRange("D" + rownum);
      cell.setFormula('=IFERROR(TRIM(LEFT(SUBSTITUTE(MID(B' + rownum +',FIND("$",B' + rownum +'),LEN(B' + rownum +'))," ",REPT(" ",100)),100)),HYPERLINK("https://housing.sfgov.org/listings","See Housing Portal"))');
      var cell = sheet.getRange("E" + rownum);
      cell.setFormula('=IFERROR(MID($B' + rownum +',SEARCH("exceed",$B' + rownum +')+7,SEARCH("%",$B' + rownum +')-SEARCH("exceed",$B' + rownum +')-6),HYPERLINK("https://housing.sfgov.org/listings","See Housing Portal"))');
      var cell = sheet.getRange("F" + rownum);
      cell.setFormula('=IFERROR(MID($B' + rownum +',SEARCH("due",$B' + rownum +')+3,SEARCH(";",$B' + rownum +')-SEARCH("due",$B' + rownum +')-3),HYPERLINK("https://housing.sfgov.org/listings","See Housing Portal"))');
      var cell = sheet.getRange("G" + rownum);
      cell.setFormula('=IFERROR(MID($B' + rownum +',SEARCH("held on",$B' + rownum +')+7,SEARCH(". Lottery",$B' + rownum +')-SEARCH("held on",$B' + rownum +')-7),HYPERLINK("https://housing.sfgov.org/listings","See Housing Portal"))');
      var cell = sheet.getRange("H" + rownum);
      cell.setFormula('=IFERROR(MID($B' + rownum +',SEARCH("posted by",$B' + rownum +')+9,SEARCH(". ",$B' + rownum +')-SEARCH("",$B' + rownum +')-167),HYPERLINK("https://housing.sfgov.org/listings","See Housing Portal"))');
      } else if (button == ui.Button.CANCEL) {
        // User clicked "Cancel".
    
      } else if (button == ui.Button.CLOSE) {
        // User clicked X in the title bar.
    
      }
    }

    【讨论】:

    • 复制并粘贴您的答案,还是将其添加到我现有的代码中?
    • 复制/粘贴然后使用新菜单功能
    • 你在我这里过头了。有什么新的菜单功能?
    • 将脚本粘贴到重新加载电子表格后,您将在“帮助”旁边看到一个名为“添加行”的新菜单功能
    • 谢谢!敬请期待!
    【解决方案2】:

    这是我过去做过的事情。我很惊讶地发现有一个 setFormula 命令,因为我没有在这种情况下使用它,并且下面的技术工作正常。

    for(var i = 0;i < rowA[0].length; i++)
      {
        var initial_value = rowA[0][i];
        //rowA[0][i] = '=ArrayFormula(IF(Row($B:$B)=1,"' + initial_value + '",IF(LEN($B:$B),IF(REGEXMATCH($C:$C,"(?i)(' + initial_value + ')"),$D:$D,""),)))';
        rowA[0][i] = '=ArrayFormula(IF(Row(' + sr  + ')=1,"' + initial_value + '",IF(LEN(' + sr  + '),IF(REGEXMATCH(' + sr  + ',"(?i)(' + initial_value + ')"),' + vr  + ',""),)))';
      }
      rowrng.setValues(rowA);
    

    这与您所做的有点不同,因为我在运行 setValues 命令之前设置了所有数组值。但这已经工作了几个月。

    【讨论】:

      猜你喜欢
      • 2017-08-31
      • 1970-01-01
      • 2014-09-28
      • 2015-07-13
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多