从数组中查找多个值并根据匹配的 ID 替换特定列中的数据的函数?

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

我有一个简单的函数,可以根据 ID 列查找另一张工作表上的文本,并替换同一工作表的一个特定列中的文本。但我需要这个函数能够获取多个值并在单击按钮后立即替换它们。有人可以帮我吗?这是仅一个值的代码。

function saveRecord7(){
  const ss = SpreadsheetApp.getActiveSpreadsheet()
  const formWS = ss.getSheetByName('Dashboard')
  const dataWS = ss.getSheetByName('Static_VDatabase_UID')
  const idCell = formWS.getRange('G7')
  const fieldRange =["AB7"]
  const clearcell = formWS.getRange('AB7')

  const id = idCell.getValue()
  if(id== ''){

    //createNewRecord()
    return
  }
  
   const cellFound = dataWS.getRange("A:A")
                  .createTextFinder(id)
                  .matchCase(true)
                  .matchEntireCell(true)
                  .findNext()

    if(!cellFound) return  
    const row = cellFound.getRow()            
  
   const fieldValues = fieldRange.map(f => formWS.getRange(f).getValue())
   fieldValues.unshift()
   dataWS.getRange(row,20,1,fieldValues.length).setValues([fieldValues])  

 clearcell.clearContent();
}
javascript arrays google-sheets google-apps-script foreach
1个回答
0
投票
function saveRecordsBatch() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const formWS = ss.getSheetByName('Dashboard');
  const dataWS = ss.getSheetByName('Static_VDatabase_UID');

  // Assuming IDs start from G1 and values from AB1
  const idsRange = formWS.getRange('G1:G'); // Adjust the range as needed
  const valuesRange = formWS.getRange('AB1:AB'); // Adjust the range as needed

  const ids = idsRange.getValues().filter(String); // Remove empty rows
  const values = valuesRange.getValues().filter(String); // Remove empty rows

  if (ids.length !== values.length) {
    // Make sure each ID has a corresponding value
    throw new Error('Mismatch between IDs and values length');
  }

  ids.forEach((idArray, index) => {
    const id = idArray[0];
    if (id === '') {
      return; // Skip empty IDs
    }

    const cellFound = dataWS.getRange("A:A")
      .createTextFinder(id)
      .matchCase(true)
      .matchEntireCell(true)
      .findNext();

    if (!cellFound) return;
    const row = cellFound.getRow();

    // Assuming you want to replace the value in column 20
    dataWS.getRange(row, 20).setValue(values[index][0]);
  });

  // Clear the input ranges after processing
  idsRange.clearContent();
  valuesRange.clearContent();
}
© www.soinside.com 2019 - 2024. All rights reserved.