首页 > 解决方案 > 使用 .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 不包含任何数据。

标签: google-apps-script

解决方案


问题:

getValues()返回一个二维数组。但是i每次迭代都会改变。中的变化i与检索到的二维数组的索引无关。例如,在第二次迭代中,i是 1,但第二个范围(因此是第二个reserveData)可能不包含 2 行(第 0 行和第 1 行),因此reserveData[i]将是undefined

解决方案:

利用

Browser.msgBox(reserveData);//[i] removed

推荐阅读