You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于单元格值禁用Google Sheets按钮及脚本执行时保持禁用求助

Google Apps Script 按钮禁用逻辑实现

针对你的需求,以下是修改后的完整脚本,同时满足D1单元格值为1时禁用按钮和脚本执行期间保持按钮禁用两个要求:

function adm() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const stdSheet = ss.getSheetByName("STD");
  // 检查D1单元格值,若为1则直接退出,禁用按钮功能
  const d1Value = stdSheet.getRange("D1").getValue();
  if (d1Value === 1) return;

  const mainFunctionName = "adm";
  const alertFunctionName = "alert1";
  const drawings = stdSheet.getDrawings();
  const targetDrawing = drawings.filter(d => d.getOnAction() === mainFunctionName);

  if (targetDrawing.length !== 1) return;

  try {
    // 执行前切换按钮触发函数为提示函数,实现禁用效果
    targetDrawing[0].setOnAction(alertFunctionName);
    SpreadsheetApp.flush(); // 立即刷新界面,确保按钮状态生效
    sd(); // 执行核心数据转移逻辑
  } finally {
    // 无论执行成功或失败,都恢复按钮原有触发函数(仅当D1不为1时)
    if (d1Value !== 1) {
      targetDrawing[0].setOnAction(mainFunctionName);
      SpreadsheetApp.flush();
    }
  }
}

function alert1() {
  SpreadsheetApp.getUi().alert("数据正在处理中,请稍候...");
}

function sd() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const pt = ss.getSheetByName("STD");
  const pcons = ss.getSheetByName("INDEX1");
  const clr1 = ["F15:I34"];
  const pt1 = ["B1", "B8", "B9"];

  // 修正原代码解构列数不匹配问题:A15:T34为20列,对应20个变量解构
  const vs = pt.getRange("A15:T34").getValues().map(([a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t]) => [k, a, b, c, d, e, f, g, h, i, j]);
  pcons.getRange(pcons.getLastRow() + 1, 1, vs.length, vs[0].length).setValues(vs);

  pt1.forEach(f => pt.getRange(f).clearContent());
  clr1.forEach(f => pt.getRange(f).clearContent());
}

关键修改说明

  • D1值拦截:函数开头直接检查STD工作表D1单元格的值,等于1时直接终止执行,实现按钮禁用效果。
  • 执行期间锁定:用try...finally块确保脚本无论成功或报错,都能恢复按钮状态;执行前将按钮触发函数切换到提示函数,此时点击按钮只会弹出提示,无法重复触发核心逻辑。
  • 修复解构错误:原代码中A15:T34是20列数据,但解构时写了22个变量,会导致运行报错,已修正为对应20列的解构逻辑。
  • 即时刷新界面:调用SpreadsheetApp.flush()强制刷新界面,确保按钮状态的修改立即生效,避免延迟。

内容的提问来源于stack exchange,提问作者Supply Chain Team

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 10:44:53