【问题标题】:custom spreadsheet function - get a1 notation for the range?自定义电子表格函数 - 获取范围的 a1 符号?
【发布时间】:2015-07-30 05:39:55
【问题描述】:

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

这就是我卡住的地方。我可以使用以下代码获取该单元格的字符串:

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 变量正在获取调用自定义函数的单元格,而不是范围中最右边的填充单元格。我明白为什么会发生这种情况,但不知道如何获得我想要的专栏。

在我看来,该函数似乎将范围视为单元格中的值,与它们在电子表格中的实际单元格不同。

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

提前感谢您能给我的任何帮助或线索!

【问题讨论】:

    标签: google-apps-script


    【解决方案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;
    }
    

    这里还有一个更好的 for 循环建议:

    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;
    }
    

    注意:这要求范围从“A”列开始,如果不是,则必须将范围第一列添加到column

    【讨论】:

    • 太好了,我会尝试一下,看起来它会满足我的需求。感谢您的帮助。此外,我想进一步询问有关获取公式将采用的特定单元格的信息。这里的问题是,现在该函数将取决于我告诉它范围单元格距离公式所在位置的距离(多少列)。因此,如果我在工作表中添加一列——我一定会不时这样做——我需要记住返回并更改自定义函数。有没有办法让单元格名称/范围进入自定义函数?
    猜你喜欢
    • 1970-01-01
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-14
    相关资源
    最近更新 更多