google-apps-script - 获取行号和列号 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]}]
解决方案
修改点:
在以下您的图像的情况下,
检索到的数组长度
sheet.getSelection().getActiveRangeList().getRanges()
为1
。因为选中的区域是 1。由此,index
offorEach((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]}
]
推荐阅读
- python-3.x - 如何将二进制形式的字符串转换为python中的二进制字符串
- python-3.x - 使用不同的参数更改类中的类
- c++ - 使用最少的指令将 4 个单精度浮点数加载并复制到打包的 __m256 变量中
- python - Raspberry Pi 的 Python 例程声明“数据引脚预计会被反转”——这是否意味着将输入设置为低电平或完全设置其他东西?
- c++ - 解析标头后无法准备好正文
- javascript - Node.js 终端中的“react 不存在”
- android - 使用firebase填充Android中的自动完成文本视图时如何找出错误来源?
- java - 在 Canvas() 构造函数中创建空画布时出现 Java 错误
- javascript - 为浏览器 JavaScript 构建 AWS SDK JavaScript 版本 3 库时遇到问题
- botframework - UpdateActivity 抛出 400“未知活动类型”