首页 > 解决方案 > 获取行号和列号 Google 电子表格 - 应用脚本

问题描述

我正在尝试遍历用户选择并获取行和列索引,但它始终返回与列相同的第一行索引。

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

有谁知道我做错了什么?

更新

这会将行值作为数组返回,但行索引始终为 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]}]

选择-选择 2 -选择 3

标签: google-apps-scriptgoogle-sheetsgoogle-sheets-api

解决方案


修改点:

  • 在以下您的图像的情况下,

  • 检索到的数组长度sheet.getSelection().getActiveRangeList().getRanges()1。因为选中的区域是 1。由此,indexofforEach((value, index, arr)只是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]}
]

推荐阅读