通过 appscript 查找哪些 URL 列在 A 列中而不列在 B 列中

问题描述 投票:0回答:1

我在 A 列下列出了 URL,在 B 列下也列出了 URL。我想查找 A 列中列出但 B 列中未列出的 URL。

代码.gs

到目前为止我能够做到这一点。

function populateColumnC() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName("Sheet1"); 
  var noOfRows = sheet.getLastRow()-1;
  const dataRange = sheet.getRange(2,1,noOfRows,2); 
  sheet.getRange(1,3,1,1).setValue('Listed in A but not in B');
  const dataValues = dataRange.getValues();
  //Logger.log(dataValues);


  for (var i =0; i<dataValues.length; i++) {

   Logger.log(dataValues[i])

  }

}

google-apps-script google-sheets
1个回答
0
投票

在你的展示脚本中,做如下修改怎么样?

修改后的脚本1:

在本例中,输出值是 URL。

function populateColumnC() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName("Sheet1");
  var noOfRows = sheet.getLastRow() - 1;
  const dataRange = sheet.getRange(2, 1, noOfRows, 2);
  const dataValues = dataRange.getRichTextValues().map(r => r.map(c => c.getLinkUrl() || ""));
  // Logger.log(dataValues);

  const obj = new Set(dataValues.map(([, b]) => b));
  const res = dataValues.reduce((ar, [a]) => {
    if (!obj.has(a)) {
      ar.push([a]);
    }
    return ar;
  }, [['Listed in A but not in B']]);
  sheet.getRange(1, 3, res.length).setValues(res);
}
  • 当这个脚本运行时,我猜你的预期结果被放入“C”列中。

  • 虽然我不确定你的实际电子表格,但如果

    const dataValues = dataRange.getValues();
    返回 URL,我认为
    const dataValues = dataRange.getValues();
    也可以用来代替
    const dataValues = dataRange.getRichTextValues().map(r => r.map(c => c.getLinkUrl() || ""));

修改后的脚本2:

在这种情况下,输出值是包含超链接的富文本。

function populateColumnC() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName("Sheet1");
  var noOfRows = sheet.getLastRow() - 1;
  const dataRange = sheet.getRange(2, 1, noOfRows, 2);
  const dataValues = dataRange.getRichTextValues();
  const obj = new Set(dataValues.map(([, b]) => b.getLinkUrl()));
  const res = dataValues.reduce((ar, [a]) => {
    const url = a.getLinkUrl();
    if (url && !obj.has(url)) {
      ar.push([a]);
    }
    return ar;
  }, [[SpreadsheetApp.newRichTextValue().setText('Listed in A but not in B').build()]]);
  sheet.getRange(1, 3, res.length).setRichTextValues(res);
}

参考资料:

© www.soinside.com 2019 - 2024. All rights reserved.