【问题标题】:Having problems with custom function自定义函数有问题
【发布时间】:2019-07-08 17:04:28
【问题描述】:

我正在将一些电子表格从 Excel 转换为 Google 表格,并且我正在尝试执行一个函数来获取代码并应用该函数。例如,我在一列中有一个代码列表,接下来的 5 列带有文本。我想输入=myFunction("code"),我想用这个公式=vlookup(code;A1:F30;3;0)返回值,这将返回第3列和代码所在的行。

我试过这些:

function myFunc(code) {  
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var cell = sheet.getRange(getCell);
  var test = cell.setFormula('=VLOOKUP('+code+';a1:b10;2;0)')
  return test;
}

它说我没有权限调用 setFunction,

function gettext(code) {
  var func = '=VLOOKUP("'+ code +'";\'VA-Texte\'!A1:I383;\'VA-Texte\'!E1;0)'; 
  return func;
}

它打印出我需要的确切代码,但不像公式。

【问题讨论】:

  • 欢迎。问题是什么?
  • 谢谢鲁本。如何使函数像 VLOOKUP 一样工作,在其中输入“=myFunction("3-123")”,它将返回与该代码对应的列和行?
  • 这个问题太宽泛了。你读过developers.google.com/apps-script/guides/sheets/functions吗?
  • 是的,我有,我用一些我尝试过的选项编辑了帖子,但没有运气。
  • Google Apps 脚本无法评估 Google 表格公式。在 Google Apps 脚本代码中使用 JavaScript 而不是 Google 表格公式。

标签: google-apps-script google-sheets custom-function


【解决方案1】:

无法评估您的代码,因为我们不知道 getCell 的值。

在下面的代码中,“查找”是一个命名范围。范围是单元格 E4,其中包含值“ghi”,即搜索词。

function test01(){

 var abc = "lookup";  
  so5693959103(abc);

}
function so5693959103(abc) {  
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetname = "56939591";
  var sheet = ss.getSheetByName(sheetname);

  // Lookup value is the named range = lookup which is found in E4
  var vlookupformula03 = "=VLOOKUP("+abc+",A1:B10,2,0)";

  //insert formula into cell E8
  var targetRange03 = sheet.getRange("E10");

  targetRange03.setFormula(vlookupformula03);
  Logger.log("DEBUG: result03 = "+targetRange03.getValue());

}

Vlookup 截图


编辑

此版本适用于函数值=mylookup("xxx"),其中“xxx”是查找值。 在下面的示例中,查找值为 'ghi'


/*
Imitates the Vlookup function. Receives:
search - The desired value to look for in the column.
Once the cell of the [search] has been found, the returned parameter would be the value of the cell which is 1 cell to the right of the found cell.
*/
function mylookup(search) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetname = "56939591";
  var sheet = ss.getSheetByName(sheetname);
  var thevalue = search;
  var lastRow=sheet.getLastRow();
  var data=sheet.getRange(1,1,lastRow,2).getValues();

  for(i=0;i<data.length;++i){
    if (data[i][0]==thevalue){
      return data[i][1];
    }
  }
}

Mylookup 功能

【讨论】:

  • 感谢您的回答 Tedinoz,但我正在寻找的是当您输入单元格时,按照您的示例,'=myFunction(ghi)' 它返回 '3'。在您的示例中,公式在单元格“E10”上是静态的。不过谢谢。
  • 我可以给你=myFunction("ghi"),但不能给你=myFunction(ghi)。
  • 完美!它就像一个魅力。我已经离开那个项目有一段时间了,这就是为什么我之前没有尝试过它,但它就像我想要的那样工作。非常感谢 Tedinoz 的帮助。
猜你喜欢
  • 2015-06-02
  • 2014-07-21
  • 2022-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-06
相关资源
最近更新 更多