获取行号和列号 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]}
]
我正在尝试遍历用户选择并获取行和列索引,但它总是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]}
]