自定义电子表格功能 - 获取范围的a1表示法?

时间:2015-07-30 05:39:56

标签: google-apps-script

我试图为google工作表创建一个自定义函数,该函数将在1d范围的单元格中找到最右边的字符串,然后返回一个标题(在指定的行中)。

在这里,我被困住了。我可以使用以下代码获取该单元格的字符串:

function FarRightHeader(range, rownumber) {
  var cells = range[0].length;//gets the number of cells
  for (var i = 0; i < cells; i++) { //loop through the cells in the range
      var j = cells - 1 - i; // j will start at the end so the loop can work from left to right
      if (range[0][j] != "") { //if the cell contains something
        break; //jump out of the loop
      }
  }

var activeCell = SpreadsheetApp.getActiveRange().getA1Notation();
var activeColumn = activeCell.charAt(0);
var FarRightCell = "Hi, I'm___" + range[0][j] + "___ and I'm in column " + activeColumn;

return FarRightCell;
}

这里出现了故障 - activeCell变量正在调用自定义函数调用的单元格,而不是该范围内最右边的填充单元格。我理解为什么会这样,但不知道如何获得我想要的专栏。

对我而言,该函数似乎只是将单元格中的值与它们实际位于电子表格中的单元格分开来处理范围。

有没有办法在电子表格中获取有关该函数作为参数的范围的信息?

提前感谢您的任何帮助或潜在客户,您可以给我!

1 个答案:

答案 0 :(得分:1)

我没有看到任何故障,你想象你的循环是在搜索单元格,而你只是搜索从单元格值中得到的数组。 但是,当您的代码消失时,您不需要检索列,您已经拥有它,保存在j中,您只需要将其转换为字母,这里是我提取的代码:

function colName(n) {
    var ordA = 'a'.charCodeAt(0);
    var ordZ = 'z'.charCodeAt(0);
    var len = ordZ - ordA + 1;

    var s = "";
    while(n >= 0) {
        s = String.fromCharCode(n % len + ordA) + s;
        n = Math.floor(n / len) - 1;
    }
    return s;
}

此处还有一个建议更好的循环:

var column; // Initialize before so if doesn't become private scope
    for (column = ( range[0].length - 1 ); column > 0; column--) {
        if (range[0][j] != "")
            break;
}

注意:这要求范围从&#34; A&#34;开始。列,如果它不是必须将范围第一列添加到column