如何在单元格中获取自定义谷歌工作表函数的结果

问题描述

我试图在谷歌工作表的单元格中获取以下函数的结果。 我可以在脚本日志中获取结果,但我需要在单元格中使用它。有人可以添加到此语法中,以便其结果可以放置在单元格中。

function scrapeDemo(url) {

  var html = UrlFetchApp.fetch(url).getContentText();
  var res = html.match(/<div class="cr_data rr_stockprice module">.+?(<table .+?<\/table>)/);

  var document = XmlService.parse(res[1]);
  var root = document.getRootElement();

  var trNodes = root.getChild('tbody').getChildren();
  trNodes.forEach((trNode) => {
    var tdNodes = trNode.getChildren();
    var fieldName;
    var fieldValue;
    tdNodes.forEach((tdNode,idx) => {
      if (idx % 2 === 0) {
        fieldName = tdNode.getValue().trim();
      } else {
        fieldValue = tdNode.getValue().trim();
        console.log( fieldName + " : " + fieldValue );
      }
    } );
      } );
    }

我正在尝试获取当前在脚本登录单元格中可用的结果。当我将 scrapeDemo(url) 放在单元格中时,它应该提供数据。它可以是一个表,其中一列是字段名,下一列是字段值。

解决方法

如果您有一个范围或想要构建一个数据范围,并且您正在谷歌表格中执行您的脚本,您可以这样做:

var sheet = SpreadsheetApp.getActive().getSheetByName("NameOfTheSheet");
sheet.getActiveCell("A1").setValues(valueRange);

如果你想自己写一个值。使用:

var sheet = SpreadsheetApp.getActive().getSheetByName("NameOfTheSheet");
sheet.setActiveRange("A1").setValues(value);

如果你想在单元格中迭代,那么使用:

...
sheet.setActiveRange("A" + i).setValues(value);
i++;
...
,

问题正文中的脚本不包含 return 语句,但 Google Sheets 自定义函数应该有一个返回 Google Sheets 支持的值/对象(数字、字符串、布尔值、日期或数组的数组)支持的值/对象),例如:

/**
 * If a and b are numbers these values will be added
 * If a or b are strings the these values will be concatenated
 */
function myFunction(a,b){
  return a + b;
}
/**
 * Returns a Matrix of X having rowNum by colNum
 *
 */
function XMATRIX(rowNum,colNum){
  var output = [];
  for(var i = 0; i < rowNum; i++){
    output[i] = [];
    for(var j = 0; j < colNum; j++){
       output[i][j] = 'X';
    }
  }
  return output
}

资源

https://developers.google.com/apps-script/guides/sheets/functions