Боковая панель / скрипт Google Sheets - используйте выпадающий список, чтобы выбрать значение из диапазона, затем введите значения в той же строке - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть книга Google Sheets, которую я использую для отслеживания корректурных заданий. Существует лист состояния, который использует запросы для извлечения информации об активных работах из листа журнала работ, а затем выполняет некоторые вычисления, чтобы показать мой прогресс.

Снимок экрана: Таблица состояния с боковой панелью

Ссылка: Копия листа состояния только для просмотра

Я создал пользовательскую боковую панель для выбора строки по приоритету (столбец 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 Sheets, поэтому я был бы очень признателен за любую помощь. Спасибо!

1 Ответ

0 голосов
/ 07 февраля 2020

Как ввести значения, выбранные из боковой панели, в выбранную строку листа?

  • Вам необходимо реализовать функциональность, чтобы установить sh, в какой строке находится выбранный приоритет - хороший Это можно сделать с помощью 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 и заполнить его значениями из листа?

Пожалуйста, смотрите этот пост , где было реализовано нечто очень похожее.

...