从另一个函数调用一个函数并返回结果



我试图从另一个函数(主函数(调用一个函数,但看不到返回值。当我尝试在没有参数的情况下单独运行函数时,一切都很顺利。

function main(){
let sheetID = "***IDHERE***";
let sheet = SpreadsheetApp.openById(sheetID);
let sheetName = sheet.getSheetByName("SAMPLESHEET");
let sheetData = sheetName.getDataRange().getDisplayValues().filter(data => data[0] != "");
Logger.log(buscarRegistros(sheetData, 19));
}
function buscarRegistros(sheet, data){
let sheetData = sheet;
let input = data;
let registros = [];
for(i=0; i< sheetData.length; i++){
if( sheetData[0] === input || sheetData[2] === input ){
registros.push(i);
}
}
return registros;
}

修改点:

  • 在脚本中,sheetData是一个2维数组。并且,所有检索到的值都是字符串类型。但是,在buscarRegistros中,您正在比较if( sheetData[0] === input || sheetData[2] === input ){中的数组和数字。我想这可能就是你问题的原因

当这些点反映在脚本中时,下面的修改如何?

发件人:

if( sheetData[0] === input || sheetData[2] === input ){

收件人:

if (sheetData[i][0] == input || sheetData[i][2] == input) {

注:

  • 在您的脚本中,我认为也可以使用以下修改。

    let sheetID = "***IDHERE***";
    let sheet = SpreadsheetApp.openById(sheetID);
    let sheetName = sheet.getSheetByName("SAMPLESHEET");
    let search = 19;
    let result = sheetName.getDataRange().getDisplayValues().filter(data => data[0] != "").flatMap((r, i) => (r[0] == search || r[2] == search) ? [i] : []);
    

参考文献:

  • getDisplayValues((
  • 严格相等(===(

试试这个:

function main(){
let ss = SpreadsheetApp.openById("sheetID");
let sh = ss.getSheetByName("SAMPLESHEET");
let vs = sh.getDataRange().getDisplayValues().filter(data => data[0] != "");
Logger.log(buscarRegistros(vs, 19));
}
function buscarRegistros(v,n){
let a =v.map(r => {if(r[0] == n || r[2] == n) { return i;};})
return a;
}

最新更新