可以“跳过”行的arrayformula

问题描述 投票:3回答:2

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

例:

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

因此,Array_2中的所有行都由数组公式填充。但是,用户希望直接转到Array_2中的第二个单元格并更改其值。当然,按照设计ARRAYFORMULA会打破。有没有办法修改ARRAYFORMULA,以便它只是跳过用户编辑过的单元格并继续前进,好像什么也没发生过?

google-sheets
2个回答
1
投票

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

在第二列中编辑单元格时,此脚本将公式放在相邻单元格中。这样,如果您需要手动输入内容并且不需要事先将公式放入所有行,则可以覆盖公式。我让人们不小心编辑了公式,并在预先填充时大部分时间搞乱了,所以这对我来说效果更好。

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);
            }
        }
    }
}

0
投票

更改值是否会抛弃剩余公式的输出?

如果没有,您可以设置2个新选项卡:一个将接收用户覆盖值,另一个“反射”选项卡,您填充

IF(tabOverride!Rx:Cy, tabOverride!Rx:Cy, tabArray!Rx:Cy)

基本上新选项卡是克隆数组选项卡的布局,创建覆盖输入层,加上使用IF('覆盖值存在','然后显示覆盖','其他显示数组输出')逻辑返回的表示层期望值。

希望有道理!

© www.soinside.com 2019 - 2024. All rights reserved.