我需要在Google电子表格中引入功能,该功能允许用户编辑数组公式的结果。要求的原因是,ARRAYFORMULA为一组单元格设置了默认值,但是用户有时需要覆盖这些默认值。我想知道这是否遥不可及。

例子:

Row(#)|Array_1 |Array_2
------------------------------------
 1    |a       |=arrayformula(Array_1)
 2    |b       |""
 3    |c       |""
 4    |d       |""

因此,Array_2中的所有行都由一个数组公式填充。但是,用户希望直接转到Array_2中的第二个单元格并更改其值。当然,根据设计,ARRAYFORMULA会损坏。有什么方法可以修改ARRAYFORMULA,以便它可以跳过用户编辑的单元格,并继续前进,就好像什么都没有完成一样。

最佳答案

我意识到这是一个老问题,但是我今天正在寻找这个问题,并制作了一个对我有用的脚本。

在第二列中编辑单元格时,此脚本会将公式放在相邻的单元格中。这样,如果您需要手动输入某些内容,而无需事先将公式放入所有行中,则可以覆盖公式。在大多数时候,我不小心编辑了公式并将其弄乱,所以这对我来说效果更好。

function onEdit() {

    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheetList = ["Sheet1","Sheet2","Sheet3"]; // list of sheets to run script on

    for (i = 0; i < sheetList.length; i++) {

        var sheetName = ss.getSheetByName(sheetList[i]);

        // only runs if sheet from sheetList is found
        if (sheetName != null) {

            var aCell = sheetName.getActiveCell();
            var col = aCell.getColumn();
            var adjacentCell = aCell.offset(0, -1);
            var formula = 'INPUT FORMULA HERE'; // put the formula you want in the adjacentCell here. Don't use it in an arrayformula

            // only runs if active cell is in column 2, if the adjacentCell is empty, and if the active cell is not empty(otherwise it runs if you delete something in column 2)
            if(col==2 && adjacentCell.getValue()=="" && aCell.getValue()!="") {

                adjacentCell1.setValue(formula);
            }
        }
    }
}

关于google-sheets - 可以 "skip"行的arrayformula,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24744937/

10-12 12:21