如何动态设置从 google spread sheet 到另一个 google spread sheet 单元格的值

How to set dynamically value from a google spread sheet to another google spread sheet cell

我正在尝试从交接报告中获取合同日期 google 价差 sheet,

//这是移交报告的样本sheet https://docs.google.com/spreadsheets/d/1gVnj2LV60hBXmuiTDa287cNoN1VzroPJEPXl3w-SBF0/edit?usp=sharing

然后,我想将值设置为与包含移交报告 ss id 的行和包含“合同日期”文本的列匹配的单元格。

//这里是示例列表 sheet https://docs.google.com/spreadsheets/d/1Hu8dTsuH5iS9P0JGBlyN6pOWHo1hhe2t03Wih2BDRGw/edit?usp=sharing

但是,什么也没发生:( 如您所见,保持行和列动态以实现灵活性和可扩展性很重要。

非常感谢您的帮助。

function contractDate() {
  
  //handover report ss
  var ss = SpreadsheetApp.getActive();
  var sh = ss.getSheetByName('handover report');
  var val = sh.getRange(2,1).getValue();
  var id = ss.getId();
  
  //list ss
  var lss = SpreadsheetApp.openById('1Hu8dTsuH5iS9P0JGBlyN6pOWHo1hhe2t03Wih2BDRGw');
  var lsh = lss.getSheetByName('before submission');
  var lastCol = lsh.getLastColumn();
  var lastRow = lsh.getLastRow();

  
  //get dynamic column number of contranct date 
  function findCol_contractDate(lsh,lastCol) {
    for (var i=1; i<=lastCol; i++) {
    if(lsh.getRange(1,i).getValue() === 'constract date') {
        return i;
    }
      return 0;
    }
  }
  
  
  // get dynamic column number of handover report
  function findCol_report(lsh,lastCol) {
    for (var i=1; i<=lastCol; i++) {
      if(lsh.getRange(1,i).getValue() === 'ss id of handover report') {
        return i;
      }
      return 0;
    }
  }
  
  //get dynamic row number of ss id that match with the id
  function findRow(lsh,lastRow,findCol_report,id) {
    for(var i=1; i<=lastRow; i++) {
      if(lsh.getRange(i,findCol_report).getValue() === id) {
        return i;
      }
      return 0;
      
    }
  }
  
  //set value
  function setValue(findRow,findCol_contractDate,val) {
   lsh.getRange(findRow,findCol_contractDate).setValue(val);
  }
}

问题在于你编写函数的方式

您在 contractDate() 中定义了所有函数,但您从不调用它们,也从不为它们分配参数。

还有:

您的 return 0; 语句应放在 for 循环之后 - 否则如果 if 条件未满足,则在第一次迭代后将返回 0。返回意味着函数将在迭代完成之前停止。

工作样本:

//handover report ss
var ss = SpreadsheetApp.getActive();
var sh = ss.getSheetByName('handover report');
var val = sh.getRange(2,1).getValue();
var id = ss.getId();

//list ss
var lss = SpreadsheetApp.openById('1Hu8dTsuH5iS9P0JGBlyN6pOWHo1hhe2t03Wih2BDRGw');
var lsh = lss.getSheetByName('before submission');
var lastCol = lsh.getLastColumn();
var lastRow = lsh.getLastRow();

function contractDate() {  
  var dateCol = findCol_contractDate(); 
  var reportCol = findCol_report();
  var row = findRow(reportCol);
  setValue(row,dateCol);
  
}

//get dynamic column number of contranct date 
function findCol_contractDate() {
  for (var i=1; i<=lastCol; i++) {
    if(lsh.getRange(1,i).getValue() === 'contract date') {
      return i;
    }
  }
  return 0;
}


// get dynamic column number of handover report
function findCol_report() {
  for (var i=1; i<=lastCol; i++) {
    if(lsh.getRange(1,i).getValue() === 'ss id of handover report') {
      return i;
    }
  }
  return 0;
}

//get dynamic row number of ss id that match with the id
function findRow(findCol_report) {
  for(var i=1; i<=lastRow; i++) {
    if(lsh.getRange(i,findCol_report).getValue() === id) {
      return i;
    }    
  }
  return 0;
}

//set value
function setValue(findRow,findCol_contractDate) {
  if(findRow > 0 && findCol_contractDate > 0){
    lsh.getRange(findRow,findCol_contractDate).setValue(val);
  }
}