【问题标题】:Using Google Script to get an array from a list of cells in google sheet使用谷歌脚本从谷歌表中的单元格列表中获取数组
【发布时间】:2015-05-28 16:30:20
【问题描述】:

如何在 Google 表格的一组单元格中创建一组值?

该数组应与单元格具有相同的行和列,并且其值应与工作表在每个位置的值相同。

另外,我希望能够将数组的范围作为参数传递,以便我可以将函数用于不同的范围。

编辑 2: 新代码,几乎可以工作,我只需要让它接收来自谷歌表本身的用户输入的范围。这就是我想要的工作,但一开始是努力工作,我无法选择范围并让单元格更新并运行函数。

此外,我几乎每次都遇到参考错误的问题,即使我尝试在没有任何参数的情况下预设函数内的范围

function sortingtest(pWO, pInfo, pSearch) {
    var WO = SpreadsheetApp.getActiveSpreadsheet().getRange(pWO).getValues();
    var Info = SpreadsheetApp.getActiveSpreadsheet().getRange(pInfo).getValues();
    var Search = SpreadsheetApp.getActiveSpreadsheet().getRange(pSearch).getValues();
    //[row][column]

    var FinalArray1 = [];
    var FinalArray2 = [];
    var FinalArray3 = [];
    var LastArray = [];
    var a = 0;
    var b = 0;
    var c = 0;
    var d = 0;

    for (var row = 0; row < WO.length; row ++) {
        var counter = row - 1;
        while (WO[row] == "") {
            WO[row] = WO[counter];
            counter--;
        }
    }

    for (var col = 0; col < Info[0].length; col++) {
        for (var row = 0; row < Info.length; row++) {
            if (Info[row][col] == Search[col]) {
                if (col == 0) {
                    FinalArray1[a] = WO[row];
                    a++;
                }
                else if (col == 1) {
                    FinalArray2[b] = WO[row];
                    b++;
                }
                else if (col == 2) {
                    FinalArray3[c] = WO[row];
                    c++;
                }
            }
        }
    }

    for (var i = 0; i < FinalArray1.length; i++) {
        for (var j = 0; j < FinalArray2.length; j++) {
            for (var k = 0; k < FinalArray3.length; k++) {
                if (FinalArray3[k] == FinalArray2[j] && FinalArray2[j] == FinalArray1[i]) {
                    LastArray[d] = FinalArray1[i];
                    d++;
                }
            }
        }
    }
    return LastArray;
}

【问题讨论】:

  • 这是我的整个函数在上面的样子,但我需要它,所以我可以在我选择发送的范围内说,我需要该函数在该单元格范围内的任何内容时更新单元格变了
  • 您提到“在范围内发送(?)”和“来自谷歌表格的输入”......您是否将其称为表格中的自定义函数?这是一条非常重要的信息,如果是这样,应该在问题中明确说明。函数调用是什么样的?参数是作为字符串传递的,还是您希望有类似=sortingtest(A1:C12,D1:E12,F1:G4) 的东西?
  • 是的,我是从 google 表格中调用这个函数的,很抱歉没有说清楚,我确实希望有类似的东西,但它也会包括像这样的单独表格:=sortingtest(sheet1! A1:C12,sheet3!D1:E12,sheet2!F1:G4)

标签: javascript arrays google-apps-script google-sheets custom-function


【解决方案1】:

如果您按照注释 (=sortingtest(sheet1!A1:C12,sheet3!D1:E12,sheet2!F1:G4)) 中的说明从电子表格中调用函数,则无需调用任何 SpreadsheetApp 函数即可获取数组:pWOpInfo 和 @987654326 @ 已经是二维数组了。

引用谷歌自定义函数article

如果您调用函数时将引用单元格区域作为参数(like =DOUBLE(A1:B10)),则该参数将是单元格值的二维数组。例如,在下面的屏幕截图中,=DOUBLE(A1:B2) 中的参数被 Apps 脚本解释为 double([[1,3],[2,4]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多