获取行号和列号 Google 电子表格 - 应用脚本

get row and column number Google spreadsheet - App script

我正在尝试遍历用户选择并获取行和列索引,但它总是returns列的第一行索引相同。

sheet.getActiveRangeList().getRanges().forEach((val, index, arr) => {
    val.getValues().forEach((e, index, arr) => {
      const row = val.getRow(); // always 2
      const columns = val.getColumn(); // always 1
    });
  });

有谁知道我做错了什么吗?

更新

此 returns 行值作为数组,但行索引始终为 1

sheet.getSelection().getActiveRangeList().getRanges().forEach((value, index, arr) => {
    console.log(value.getRow()) // always 1
    console.log(value.getRowIndex()) // always 1
    console.log(value.getValues()) // row values as array
  })

更新 2

当用户选择一系列行和列时,我想获取该行中选定行和列的范围。

示例:

[{selectedRow: selectedRow, selectedColumns[...columnIndex]}]

Selection - Selection 2 - Selection 3

修改点:

  • 对于下面你的图片,

  • sheet.getSelection().getActiveRangeList().getRanges()检索到的数组长度为1。因为选择的区域是1。这样一来,forEach((value, index, arr)index就只有0了。我认为这就是您遇到问题的原因。

  • 如果要获取行号和列号的列表,需要在循环中获取。

以上几点反映到一个脚本中,就变成了下面这样。

示例脚本:

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var res = sheet.getActiveRangeList().getRanges().map(range => {
    const startRow = range.getRow();
    const endRow = startRow + range.getNumRows() - 1;
    const startColumn = range.getColumn();
    const endColumn = startColumn + range.getNumColumns() - 1;
    const temp = []
    for (var r = startRow; r <= endRow; r++) {
      for (var c = startColumn; c <= endColumn; c++) {
        temp.push({row: r, column: c});
      }
    }
    return {[range.getA1Notation()]: temp};
  });
  console.log(JSON.stringify(res))
}

结果:

当此脚本为您的示例图像 运行 时,将获得以下值。

[
  {"A1:C5": [
    {"row":1,"column":1},
    {"row":1,"column":2},
    {"row":1,"column":3},
    ,
    ,
    ,
  ]
}

参考文献:

已添加:

当您想从以下情况中检索行和列索引时,

下面的示例脚本怎么样?

示例脚本:

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var res = sheet.getActiveRangeList().getRanges().flatMap(range => {
    const startRow = range.getRow();
    const endRow = startRow + range.getNumRows() - 1;
    const startColumn = range.getColumn();
    const endColumn = startColumn + range.getNumColumns() - 1;
    const temp = []
    for (var c = startColumn; c <= endColumn; c++) {
      const tempObj = {selectedColumn: c, selectedRows: []};
      for (var r = startRow; r <= endRow; r++) {
        tempObj.selectedRows.push(r);
      }
      temp.push(tempObj);
    }
    return temp;
  });
  console.log(JSON.stringify(res))
}

结果:

当上述脚本为“A1:A5”和“C2:C5”的选定范围运行时,得到以下结果。

[
  {"selectedColumn":1,"selectedRows":[1,2,3,4,5]},
  {"selectedColumn":3,"selectedRows":[2,3,4,5]}
]