Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 获取行数和列数Google电子表格-应用程序脚本_Google Apps Script_Google Sheets_Google Sheets Api - Fatal编程技术网

Google apps script 获取行数和列数Google电子表格-应用程序脚本

Google apps script 获取行数和列数Google电子表格-应用程序脚本,google-apps-script,google-sheets,google-sheets-api,Google Apps Script,Google Sheets,Google Sheets Api,我试图循环用户选择并获取行和列索引,但它总是为列返回相同的第一行索引 sheet.getActiveRangeList().getRanges().forEach((val, index, arr) => { val.getValues().forEach((e, index, arr) => { const row = val.getRow(); // always 2 const columns = val.getColumn(); // alwa

我试图循环用户选择并获取行和列索引,但它总是为列返回相同的第一行索引

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

修改点:
  • 在下列情况下,您的图像

  • sheet.getSelection().getActiveRangeList().getRanges()
    检索到的数组长度为
    1
    。因为所选区域为1。因此,
    forEach((value,index,arr)
    index
    仅为
    0
    。我认为这就是您问题的原因

  • 如果要检索行号和列号列表,则需要在循环中检索它们

当上述各点反映到脚本中时,它将变成如下所示

示例脚本: 参考资料:
补充: 如果要从以下情况检索行和列索引

下面的示例脚本怎么样

示例脚本:
我也可能有一些情况,用户在选择之间可能有空白列/行。通过电子表格循环,我仍然能够仅获取所选单元格吗?@t97感谢您的回复。从您的回复来看,我认为我建议的脚本适用于多个所选范围。当您测试它时,您得到了什么结果?@t97另外,从你的问题来看,我担心我可能无法正确理解你期望的输出格式。如果你想用你期望的格式检索输出值,你能提供示例输出值吗?通过这一点,我想修改示例脚本。通过选择单个单元格(C2),我得到以下结果:
[{“C2”:[{“行”:2,“column”:3},{“row”:2,“column”:4},{“row”:3,“column”:3,{“row”:3,“column”:4}]}]
@t97谢谢您的回复。给您带来的不便我深表歉意。我忘记了
-1
尾行
尾列
。我更新了它。请您确认好吗?
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))
}
[
  {"selectedColumn":1,"selectedRows":[1,2,3,4,5]},
  {"selectedColumn":3,"selectedRows":[2,3,4,5]}
]