AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 76956303
Accepted
Jarvis Davis
Jarvis Davis
Asked: 2023-08-23 03:21:29 +0800 CST2023-08-23 03:21:29 +0800 CST 2023-08-23 03:21:29 +0800 CST

执行基于下拉列表中选择的值的 Apps 脚本

  • 772

下午好,在此输入图像描述

我有一个 Google 表格,其中包含一份摘要表和大约。20 个子选项卡。在摘要表上,我创建了一个下拉列表,其中列出了每个子选项卡。

当用户从下拉列表中选择特定的子选项卡然后单击“清除”按钮时,我希望在选项卡中清除指定行范围内的金额。

目前我有一个单独的函数来清除每个工作表。我尝试将其合并为一个函数。

在附图中,下拉列表位于

Summary!J4

下拉列表的片段

--> Planning
--> Framing
--> Foundation
--> ALL SHEETS

我附上了代码片段和图片以供澄清。非常感谢任何帮助。谢谢!

function clearPlanningfields() {

 var myGoogleSheet=SpreadsheetApp.getActiveSpreadsheet();

 var shUserForm=myGoogleSheet.getSheetByName("Planning");

 var ui=SpreadsheetApp.getUi();

 var response=ui.alert("Reset Confirmation", "Do you want to Clear the Sheets?", ui.ButtonSet.YES_NO);

 if(response==ui.Button.NO){

   return;

 }

 shUserForm.getRange('H5:H13').setValue('');
 shUserForm.getRange('H17:H26').setValue('');
 shUserForm.getRange('H30:H31').setValue('');
 shUserForm.getRange('H35:H41').setValue('');


 shUserForm.getRange('O5:O13').setValue(false);
 shUserForm.getRange('O17:O26').setValue(false);
 shUserForm.getRange('O30:O31').setValue(false);
 shUserForm.getRange('O35:O41').setValue(false);

 shUserForm.getRange('N4').setValue(0.00);
 shUserForm.getRange('N16').setValue(0.00);
 shUserForm.getRange('N29').setValue(0.00);
 shUserForm.getRange('N34').setValue(0.00);

 myGoogleSheet.toast("Amounts have been Reset from selected Sheet");

return true;

}



function clearFramingfields() {

 var myGoogleSheet=SpreadsheetApp.getActiveSpreadsheet();

 var shUserForm=myGoogleSheet.getSheetByName("Framing");

 var ui=SpreadsheetApp.getUi();

 var response=ui.alert("Reset Confirmation", "Do you want to Clear the Sheets?", ui.ButtonSet.YES_NO);

 if(response==ui.Button.NO){

   return;

 }

 shUserForm.getRange('H5:H19').setValue('');
 shUserForm.getRange('H23:H42').setValue('');
 shUserForm.getRange('H46:H66').setValue('');
 shUserForm.getRange('H70:H84').setValue('');


 shUserForm.getRange('O5:O19').setValue(false);
 shUserForm.getRange('O23:O42').setValue(false);
 shUserForm.getRange('O46:O66').setValue(false);
 shUserForm.getRange('O70:O84').setValue(false);

 shUserForm.getRange('N4').setValue(0.00);
 shUserForm.getRange('N22').setValue(0.00);
 shUserForm.getRange('N45').setValue(0.00);
 shUserForm.getRange('N69').setValue(0.00);

 myGoogleSheet.toast("Amounts have been Reset from selected Sheet");

return true;

}



function clearFoundationfields() {

 var myGoogleSheet=SpreadsheetApp.getActiveSpreadsheet();

 var shUserForm=myGoogleSheet.getSheetByName("Foundation");

 var ui=SpreadsheetApp.getUi();

 var response=ui.alert("Reset Confirmation", "Do you want to Clear the Sheets?", ui.ButtonSet.YES_NO);

 if(response==ui.Button.NO){

   return;

 }

 shUserForm.getRange('H5:H10').setValue('');
 shUserForm.getRange('H14:H22').setValue('');
 shUserForm.getRange('H26:H41').setValue('');
 shUserForm.getRange('H45:H55').setValue('');
 shUserForm.getRange('H59:H62').setValue('');


 shUserForm.getRange('O5:O10').setValue(false);
 shUserForm.getRange('O14:O22').setValue(false);
 shUserForm.getRange('O26:O41').setValue(false);
 shUserForm.getRange('O45:O55').setValue(false);
 shUserForm.getRange('O59:O62').setValue(false);

 shUserForm.getRange('N4').setValue(0.00);
 shUserForm.getRange('N13').setValue(0.00);
 shUserForm.getRange('N25').setValue(0.00);
 shUserForm.getRange('N44').setValue(0.00);
 shUserForm.getRange('N58').setValue(0.00);

 myGoogleSheet.toast("Amounts have been Reset from selected Sheet");

return true;

}

链接虚拟电子表格

google-apps-script
  • 1 1 个回答
  • 37 Views

1 个回答

  • Voted
  1. Best Answer
    SputnikDrunk2
    2023-08-23T06:58:52+08:002023-08-23T06:58:52+08:00

    建议

    注意:此答案旨在作为您的项目的起点或参考。需要注意的是,社区成员不提供编码服务。

    也许您可以尝试下面这个经过调整的脚本。这会根据选定的工作表选项卡自动识别要清除的行。

    脚本

    function clearFields() {
      //Get the sheet tab selection from the drop-down
      var tabReference = SpreadsheetApp.getActive().getSheetByName('Summary').getRange('J4').getValue();
      //Pass the sheet tab to be cleared
      var rawRowData = SpreadsheetApp.getActive().getSheetByName(tabReference).getDataRange().getValues();
      //Used the column 9 as reference
      var reference = rawRowData.map((cell, row) => [row + 1, cell[8]]);
      reference.shift();
    
      //Find the ranges needed to be cleared
      var cleanRowData = reference.map(data => data[1] === '' ? "x" : data[0] + "|");
      var rangeChunks = cleanRowData.join('').split('x').filter(data => data != '');
      var startEndRows = rangeChunks.map(x => [x.split('|').filter(_ => _)[0], x.split('|').filter(_ => _)[x.split('|').filter(_ => _).length - 1]]);
    
      //Reference on what columns to be cleared
      var columns = ['H', 'O', 'N'];
    
      //Clear the ranges
      columns.forEach(col => {
        startEndRows.forEach(range => {
          SpreadsheetApp.getActive().getSheetByName(tabReference).getRange(`${col}${range[0]}:${col}${range[1]}`).setValue(col == 'H' ? '' : col == 'O' ? false : col == 'N' && 0.00)
          console.log(`Cleared range: ${col}${range[0]}:${col}${range[1]} replaced with '${col == 'H' ? '' : col == 'O' ? false : col == 'N' && 0.00}'`);
        });
      });
    }
    

    演示


    例如,从摘要表选项卡的下拉菜单中选择“框架”选项卡。

    这是日志结果:

    图像

    • 0

相关问题

  • 连接到引用变量?

  • jQuery 和冒泡加载页面导入内容为空 Google Sheet Importxml - 什么 google apps 脚本解决方法?

  • 如何使用 Gmail 插件中的卡服务实现文件上传功能

  • 脚本未按预期将单元格值复制到 K5

  • 谷歌应用程序脚本水平复选框,如单选按钮(选中/取消选中)

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    使用 <font color="#xxx"> 突出显示 html 中的代码

    • 2 个回答
  • Marko Smith

    为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类?

    • 1 个回答
  • Marko Smith

    您可以使用花括号初始化列表作为(默认)模板参数吗?

    • 2 个回答
  • Marko Smith

    为什么列表推导式在内部创建一个函数?

    • 1 个回答
  • Marko Smith

    我正在尝试仅使用海龟随机和数学模块来制作吃豆人游戏

    • 1 个回答
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 个回答
  • Marko Smith

    为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)?

    • 4 个回答
  • Marko Smith

    为什么库中不调用全局变量的构造函数?

    • 1 个回答
  • Marko Smith

    std::common_reference_with 在元组上的行为不一致。哪个是对的?

    • 1 个回答
  • Marko Smith

    C++17 中 std::byte 只能按位运算?

    • 1 个回答
  • Martin Hope
    fbrereto 为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 您可以使用花括号初始化列表作为(默认)模板参数吗? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi 为什么列表推导式在内部创建一个函数? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A fmt 格式 %H:%M:%S 不带小数 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python C++20 的 std::views::filter 未正确过滤视图 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute 为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa 为什么库中不调用全局变量的构造函数? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis std::common_reference_with 在元组上的行为不一致。哪个是对的? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev 为什么编译器在这里错过矢量化? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan C++17 中 std::byte 只能按位运算? 2023-08-17 17:13:58 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve