google-apps-script - 使用 .getSelection.getActiveRangeList().getRanges() 未获取全部数据
问题描述
我已经为此来回走了几个小时,我正要拔掉我的头发。
我有一个主电子表格,我从中提取数据、复制它并将其粘贴到另一个工作表中。这是根据用户选择的行来完成的。选择单行可以按预期工作,多行(如果相邻)也可以。现在我开始另一个 if 块来说明使用此代码块选择的不相邻的多行:
var myRange = mySelection.getActiveRangeList().getRanges();
Browser.msgBox(myRange.length)
for ( var i = 0; i < myRange.length; i++) {
var reserveData = myRange[i].getValues();
Browser.msgBox(reserveData[i]);
}
假设用户选择 4 行进行复制。第一个 MsgBox 将显示长度为 4。太好了!但是,for 循环中的 MsgBox 只会显示循环第一次迭代的数据。第 2、3 和 4 个 MsgBox 不包含任何数据。
解决方案
问题:
getValues()
返回一个二维数组。但是i
每次迭代都会改变。中的变化i
与检索到的二维数组的索引无关。例如,在第二次迭代中,i
是 1,但第二个范围(因此是第二个reserveData
)可能不包含 2 行(第 0 行和第 1 行),因此reserveData[i]
将是undefined
。
解决方案:
利用
Browser.msgBox(reserveData);//[i] removed