【问题标题】:Matching values between 2 ranges continuously and pasting value in different col, if true如果为真,则连续匹配 2 个范围之间的值并将值粘贴到不同的列中
【发布时间】:2019-04-17 10:20:17
【问题描述】:

我有一个带有 2 个选项卡、BOMSheet 和 POProcess 的 Google 表格。我想通过在 BOM 表的 D 列值中查找 POProcess 表的 B 列值(连续一个接一个)来复制 PO 流程表中的 PO 编号,如果匹配,则将 PO 编号粘贴到 BOM 表的 M 列中(对于所有匹配的值)。这是工作表的链接。

https://docs.google.com/spreadsheets/d/1MqYn2AjPncx-RvvyTS8Nj0ujpm9Lcd_ORJF9Wqbw6y0/edit?usp=sharing

我尝试了下面的代码,但它无法检查 PO 流程表中的唯一一个值。请帮助如何从 PO 流程表中迭代值

函数更新状态() {

var sss = SpreadsheetApp.getActiveSpreadsheet();
var ss = sss.getSheetByName('POProcess'); //replace with source Sheet tab name
var range = ss.getRange('C4'); //assign the range you want to copy
var data = range.getValues();

var range2 = ss.getRange('B8'); //value to look for to be replaced
var data2 = range2.getValues();

var sheet = sss.getSheetByName('BOMSheet');
var range3 = sheet.getRange('A:L');
var values = range3.getValues();
for (var i = 0; i < values.length; i++) {
  if (values[i][3] == data2) {
   values[i][12] = data;

  }
}
range3.setValues(values);

}

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    此功能只能用于采购订单号。

    function UpdateStatus() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var pSheet = ss.getSheetByName('POProcess'); //replace with source Sheet tab name
      var pNumber = pSheet.getRange('C4').getValue(); //assign the range you want to copy
    
      var pRange = pSheet.getRange(8, 2, pSheet.getLastRow()-7, 1); //value to look for to be replaced
      var pData = pRange.getValues().map(function(el) {
        return el[0];
      });
    
      var sheet = ss.getSheetByName('BOMSheet');
      var range3 = sheet.getDataRange();
      var values = range3.getValues();
    
      values.forEach(function(row) {
        if (row[3] == '') return;
        if (pData.indexOf(row[3]) > -1) {
          row[12] = pNumber;
        }
      });
    
      range3.setValues(values);
    }
    

    也可以映射“收到的数量”列,试试这个。

    function UpdateStatus() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var pSheet = ss.getSheetByName('POProcess'); //replace with source Sheet tab name
      var pNumber = pSheet.getRange('C4').getValue(); //assign the range you want to copy
    
      var pRange = pSheet.getRange(8, 2, pSheet.getLastRow() - 7, pSheet.getLastColumn()-1); //values to map
      var pData = {};
      pRange.getValues().forEach(function(row) {
        pData[row[0]] = row[6];
      });
    
      var sheet = ss.getSheetByName('BOMSheet');
      var range3 = sheet.getDataRange();
      var values = range3.getValues();
    
      values.forEach(function(row) {
        if (row[3] == '') return;
        if (typeof pData[row[3]] != 'undefined') {
          row[12] = pNumber;
          row[13] = pData[row[3]];
        }
      });
    
      range3.setValues(values);
    }
    

    【讨论】:

    • 感谢您的回复。它将值复制到 BOM 表中的整个第 12 列。我只需要匹配值的 PO 编号,而不需要整列
    • 做得更好,但也粘贴在空白单元格中
    • 再来一次))
    • 谢谢拉菲,它现在可以正常工作了。再次感谢您
    • ra89fi 在之前的代码中,只有 pSheet 中的 C4 被复制并粘贴到 BoM 表中,以匹配每个匹配的项目。这是另一个问题,如果我在 pSheet 中有一系列值 H8:H17 需要映射到 Bom 表 N 列中的每个项目。即上述代码的行[13]
    猜你喜欢
    • 1970-01-01
    • 2022-01-20
    • 2021-09-26
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多