如何使用 TextFinder() 将 Google 表格侧栏中表单输入的值传递到 Google 表格单元格

问题描述 投票:0回答:1

我已经为这个问题困惑了好几个小时了。

这就是我想要实现的目标。最终目标是能够使用 Google 表格中的侧边栏修改作业名称。侧边栏可以通过自定义菜单打开。在侧边栏中,我有一个下拉字段,可以从特定范围中提取所有作业名称。在下面的字段中,用户可以输入更新的名称。

然后,使用

textFinder()
功能,我希望找到在下拉字段中选择的原始名称并将其替换为新名称。

这是我的代码:

代码.gs

function onOpen() {
  var ui = SpreadsheetApp.getUi();
    ui.createMenu('Manager Menu')
      .addItem('Rename Job', 'showNewJobSidebar')
      .addToUi();
  SpreadsheetApp.getUi();
}

function showNewJobSidebar() {
  
   var html = HtmlService
      .createTemplateFromFile('sidebar');

  // Add the dropdown lists to the template

   html.dropdown = SpreadsheetApp.getActiveSheet().getRange("C6:C").getValues().filter(String);

   html = html.evaluate()
      .setTitle('Change Job Position Name')

  SpreadsheetApp.getUi().showSidebar(html);
}

function updateJobName(form) {
  let ss = SpreadsheetApp.getActiveSpreadsheet();
  let sheet = ss.getActiveSheet();
  let value1 = form.Current_Job;
  let value2 = form.New_Job;
  sheet.getRange("C6:C").createTextFinder(value1).replaceAllWith(value2);
}

html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <link
    rel="stylesheet"
    href="https://ssl.gstatic.com/docs/script/css/add-ons1.css"
    />
    <style>
      .container {
          margin: 5px 5px 5px 5px;
      }

      .input-Dropdown {

        width: 50%; 
        text-align: left; 
        float: left;
        padding: 5px 5px 5px 5px;
      }

      .input-Text {

        width: 50%; 
        text-align: left; 
        float: left;
        padding: 5px 5px 5px 5px;
      }

      .custom-heading {
        font-weight: bold;
      }

    </style>
    <script>
     function submitForm() {
       google.script.run.updateJobName(document.getElementById("jobForm"));
     }
   </script>  
  </head>
  <body>
    <div class="container">
      
    <h1 class="custom-heading"><center>Rename Job</center></h1><br><br>
    
    <form id ="jobForm " onkeydown="return event.key != 'Enter'">

    <!-- Create input fields to accept values from the user -->
    Current Job Name:<br><br>
    <select class="input-Dropdown" id="Current_Job"/>
    <? for (let i in dropdown) { ?>
    <option value="<?=dropdown[i]?>"><?=dropdown[i]?></option>
    <? } ?>
    </select>
    <br>
    <br>
    <br>

    New Job Name:<br><br>
    <input class="input-Text" type="text" id="New_Job"/>
    <br>
    <br>
    <br>

    <button class="action" onclick="submitForm();">Save</button>
    <button onclick="google.script.host.close();">Close</button>
    </form>
    </div> 
  </body> 
</html>

菜单和侧边栏功能。这是带有侧边栏的工作表的屏幕截图:

已从活动工作表中的 C6:C 成功创建下拉列表。但是,当我单击“保存”时,尽管按钮发生更改以指示已按下该按钮,但电子表格不会更新,将原始作业名称更改为更新后的作业名称。有人可以指出我做错了什么吗?

这是我收到的错误:

html validation google-sheets google-apps-script
1个回答
0
投票

您不需要搜索文本。您只需要与第一列中的文本关联的行号。

gs:

function getCol1() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName("Sheet0");
  const vs = sh.getRange(2, 1, sh.getLastRow() - 1).getValues().map((r, i) => [r[0], i + 2]);
  return vs;
}
 
function changeMyData1(obj) {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName("Sheet0");
  sh.getRange(obj.row,obj.col).setValue((obj.val))
}
function launchsidebar() {
  let ui = SpreadsheetApp.getUi();
  ui.showSidebar(HtmlService.createHtmlOutputFromFile('ah4'));
}

html:

<!doctype html>
<html lang="en">

<head>
  <title>Title</title>
</head>

<body>
  <select id="sel1"></select>
  <input type="text" id="txt1" > Change to:<br>
  <input type="button" value="Edit" onClick="changeData()">
 <script>
  window.onload = () => {
    google.script.run
    .withSuccessHandler( (vs) => {
      updateSelect(vs);
    })
    .getCol1();
  }

  function updateSelect(vA){
    var id='sel1';
    vA.unshift(["Select",""])
    var select = document.getElementById(id);
    select.options.length = 0;
    for(var i=0;i<vA.length;i++) { 
      select.options[i]=new Option(vA[i][0],vA[i][1]);//second value is the row number and it gets assigned to the option value 
      } 
    } 
    
    function changeData() { 
      let r = document.getElementById("sel1").value; 
      google.script.run.changeMyData1({row:r,col:1,val:document.getElementById("txt1").value}); 
    } 
    
    </script>
</body>

</html>
    function changeMyData1(obj) {
      const ss = SpreadsheetApp.getActive();
      const sh = ss.getSheetByName("Sheet0");
      sh.getRange(obj.row,obj.col).setValue((obj.val))
    }
    function launchsidebar() {
      let ui = SpreadsheetApp.getUi();
      ui.showSidebar(HtmlService.createHtmlOutputFromFile('ah4'));
    }
© www.soinside.com 2019 - 2024. All rights reserved.