首页 > 解决方案 > Google 表格边栏/脚本 - 使用下拉菜单从范围中选择值,然后在同一行中输入值

问题描述

我有一个用于跟踪校对工作的 Google 表格工作簿。有一个状态表,它使用查询从作业日志表中提取有关活动作业的信息,然后进行一些计算以显示我的进度。

屏幕截图:带侧边栏的状态表

链接:状态表的仅查看副本

我创建了一个自定义侧边栏以按优先级(B 列)选择一行,然后轻松输入阅读的页数(I 列)和花费的分钟数(L 列),但我不知道如何将新值应用于工作表. 我还想修改侧边栏以从下拉列表中选择优先级(B 列),而不是输入值。

这是我为 UpdateSidebar.html 提供的内容:

<!DOCTYPE html>
<html>

<head>
  <base target="_top">
</head>

<body bgcolor="#039EB2">
  <font face="arial" color="white">
    <b>Select a job by Priority and enter the updated values to apply.</b><br><br>

    <!-- Create input fields to accept values from the user -->

    Job Priority:<br>
    <input type="text" id="Priority"><br><br>
    <!-- I would like this to be a dropdown with values from B13:B instead of text input -->

    Pages Read:<br>
    <input type="text" id="Pages"><br><br>

    Minutes Spent:<br>
    <input type="text" id="Minutes"><br><br>

    <!-- Create a button to update values -->
    <button onclick='saveUpdate()'>Update Job Status</button><br><br><br>

    <script>
      function saveUpdate() {
        //Get the value of the input fields 
        var priority = document.getElementById("Priority").value
        var pages = document.getElementById("Pages").value
        var minutes = document.getElementById("Minutes").value

        //Log the value of input fields in the web browser console (usually used for debugging)
        console.log(priority, pages, minutes)

        //Send the values as arugments to the server side function
        google.script.run.applyName(priority, pages, minutes)
      }
    </script>

  </font>
</body>

</html>

这是我当前的代码:

function showSidebar() {
  var html = HtmlService
      .createHtmlOutputFromFile('UpdateSidebar')
      .setTitle('Status Update Sidebar')
      .setWidth(200);
  SpreadsheetApp.getUi() // Or DocumentApp or SlidesApp or FormApp.
      .showSidebar(html);
}


function applyName(priority, pages, minutes){
  var ss = SpreadsheetApp.getActive()
  var sheetStatus = ss.getSheetByName("Status")
  var sheetLog = ss.getSheetByName("Job Log")

  <!-- //Whatever needs to happen to:
  //Select row with priority in Column B
  //Apply pages to Column I
  //Apply minutes to Column L -->
}

我对 Google 表格中的编码相当陌生,因此我将不胜感激。谢谢!

标签: htmluser-interfacegoogle-apps-scriptgoogle-sheetssidebar

解决方案


如何将从侧边栏中选出的值输入到工作表的选定行中?

  • 您需要实现一个功能来确定所选优先级位于哪一行 - 一个很好的方法是使用indexOf()
  • 您需要在所需列中选择一个单元格并在已建立的行中将其值设置为所需的参数

修改您的功能applyName如下:

function applyName(priority, pages, minutes){

  var ss = SpreadsheetApp.getActive()
  var sheetStatus = ss.getSheetByName("Status")
  var sheetLog = ss.getSheetByName("Job Log")

  //Whatever needs to happen to:
  //Select row with priority in Column B
  // the following line selects a static range, it can be modifed to a dynamic one if necessary
  var firstRow = 14;
  var lastRow = 18;
  var columnBvalues = sheetStatus.getRange(firstRow, 2, lastRow-firstRow+1, 1).getValues();
  var valueArray = columnBvalues.map(function(column){
    return column[0].toString();
  });  
  var position = valueArray.indexOf(priority);
  Logger.log(valueArray);
  Logger.log(position);
  if (position > - 1){
    var selectedRow = firstRow + position;
    //Apply pages to Column I = Column 9
    sheetStatus.getRange(selectedRow, 9).setValue(pages);
    //Apply minutes to Column L
    sheetStatus.getRange(selectedRow, 12).setValue(minutes);
  }
}

如何在 html 侧边栏中实现下拉菜单并使用工作表中的值填充它?

请参阅这篇文章,其中实现了非常相似的东西。


推荐阅读