Google sheets 有没有办法一次自动运行一个公式?

Google sheets 有没有办法一次自动运行一个公式?,google-sheets,google-sheets-formula,Google Sheets,Google Sheets Formula,假设我有一张桌子: 量 项目 价值 取回的项目 暗示 5. 肉 变量 肉 ... 使用onEdit: 您可以使用应用程序脚本(单击Tools>scripteditor,复制下面的函数并保存项目) (要使其正常工作,请创建一个新列(G),该列将用于存储有关是否存在以前的副本的信息。然后您可以将其隐藏。) 此函数将在用户每次编辑电子表格时执行,并将使用执行以下操作: 检查编辑的列是否对应于项,并且编辑的列是否是所需的工作表(您提供的电子表格中的列C和工作表配方卡) 如果是这种情况,请检查值列(D)

假设我有一张桌子:

量 项目 价值 取回的项目 暗示 5. 肉 变量 肉 ... 使用onEdit: 您可以使用应用程序脚本(单击
Tools>scripteditor
,复制下面的函数并保存项目)

(要使其正常工作,请创建一个新列(
G
),该列将用于存储有关是否存在以前的副本的信息。然后您可以将其隐藏。)

此函数将在用户每次编辑电子表格时执行,并将使用执行以下操作:

  • 检查编辑的列是否对应于
    ,并且编辑的列是否是所需的工作表(您提供的电子表格中的列
    C
    和工作表
    配方卡
  • 如果是这种情况,请检查
    列(
    D
    )是否等于
    变量
    ,列
    G
    是否等于某个字符串(在下面的示例中称为
    避免将来的更新
  • 如果是这种情况,请将值从
    C
    设置为
    E
    ,并将
    避免未来更新
    写入列
    G
代码段: 参考:

否。公式不能运行一次。您应该使用脚本。正如Krzysztof所说,您可能需要应用程序脚本。你愿意用这个吗?如果是这样的话,你会考虑提供一份电子表格吗?我以前从未使用过脚本,但我愿意尝试。复制到你们都可以编辑的副本。我不确定我是否理解想要的行为。我想只有在B列第一次更新时,D列是否应该用B列的值更新?如果以后更新了B列,那么应该忽略此更新,而不是将其复制到D列?这是正确的。我甚至无法打开脚本编辑器。“无法访问文件”错误。我相信你的答案会有用的,所以我会把它标记为正确的。@Octotroph这很奇怪,你有没有检查过其他电子表格是否会出现这种情况?
function onEdit(e) {
  const range = e.range;
  const sheet = range.getSheet();
  const rowIndex = range.getRow();
  const colIndex = range.getColumn();
  const avoidUpdateColumn = 7;
  const itemColumn = 3;
  const valueColumn = 4;
  const fetchedItemColumn = 5;
  const copyValue = "Variable"; // Do not copy if column doesn't have this value
  const avoidUpdateValue = "Avoid future updates"; // Do not copy if column has this value
  const sheetName = "Recipe Cards";
  if (colIndex === itemColumn && sheet.getName() === sheetName) {
    const numCols = sheet.getLastColumn()-colIndex+1;
    const rowValues = sheet.getRange(rowIndex, colIndex, 1, numCols).getValues()[0];
    if (rowValues[valueColumn-itemColumn] === copyValue && rowValues[numCols-1] !== avoidUpdateValue) {
      sheet.getRange(rowIndex, fetchedItemColumn).setValue(rowValues[0]);
      sheet.getRange(rowIndex, avoidUpdateColumn).setValue(avoidUpdateValue);
    }
  }
}