【问题标题】:Google Sheets App Script - Get values from formula instead of writing to cellGoogle Sheets App Script - 从公式中获取值而不是写入单元格
【发布时间】:2020-01-21 02:46:34
【问题描述】:

我的脚本使用数组公式设置整张工作表的值。

sheet.getRange("A2").setFormula("=ArrayFormula(UNIQUE(FILTER(Furniture!$A$2:$S$15000,ISNA(MATCH(Furniture!$A$2:$A$15000,Shopify!$F$2:$F$50000,0)))))");

是否可以在不更新工作表的情况下将这些值作为数组获取?目前,我能想到的最好的方法是在应用上述公式后从工作表中获取值。一定有更有效的方法。

【问题讨论】:

  • 有效的方法是在应用程序脚本(语言 2)中重新创建公式的作用(语言 1)。高效,但不容易,除非你懂两种语言。 SO 不提供免费的代码翻译。

标签: google-apps-script google-sheets-formula google-sheets-api google-sheets-macros


【解决方案1】:

您希望从“家具”表中获取未包含在“Shopify”表值中的值,然后从结果中删除重复值。您可以使用getRange() [1] 函数结合getLastRow() [2] 函数来获取每个工作表范围的值,以便获得包含数据的最后一行的范围(您可以更改此设置并简单地使用整个 A1每张纸的符号)。您可以使用 JS filter 函数 [3] 过滤来自家具中不在 Shopify 中的值,最后使用 reduce 函数 [4] 去除重复值。下面是工作代码,您需要替换电子表格 ID 并从编辑器运行 getUniqueValues 函数,这将记录您生成的数组。

function getUniqueValues() {
  var ss = SpreadsheetApp.openById('[SPREADSHEET-ID]');
  var furnitureSheet = ss.getSheetByName('Furniture');
  var shopifySheet = ss.getSheetByName('Shopify');

  //Get the range for each sheet based on last row with data
  var furnitureArray = furnitureSheet.getRange('A2:A' + furnitureSheet.getLastRow()).getValues().join().split(",");
  var shopifyArray = shopifySheet.getRange('F2:F' + shopifySheet.getLastRow()).getValues().join().split(",");

  var resultArray = furnitureArray.filter(function(furnitureValue) {        
    if(shopifyArray.indexOf(furnitureValue) == -1) {
      return true;
    }
    return false
  });

  resultArray = resultArray.reduce(function(a,b){
    if (a.indexOf(b) < 0 ) a.push(b);
    return a;
  },[]);

  Logger.log(resultArray);
}

[1]https://developers.google.com/apps-script/reference/spreadsheet/sheet#getrangea1notation

[2]https://developers.google.com/apps-script/reference/spreadsheet/sheet#getlastrow

[3]https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

[4]https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-18
    • 2020-09-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多