Используя пользовательскую боковую панель, возьмите выбранный диапазон и выведите линейный масштаб с округлением между начальным и конечным значением - PullRequest
0 голосов
/ 01 мая 2019

В электронной таблице, которую я делаю, мне часто нужно создать диапазон значений масштабирования, используя только целые числа (целые числа).

Например, 12 значений, начиная с 90 и заканчивая 120, масштабируют линейно, округляя доближайшее целое число.

Используя функции листов Google, я могу провести линию между этими значениями по следующей формуле:

=(previousValue+((finalValue-firstValue))/(ROW(finalValue)-ROW(firstValue)))

Затем перетащите эту формулу вниз после блокировки finalValue и firstValues.

однако эта формула будет производить значения с плавающей запятой.Добавление функции округления приведет к тому, что результаты будут не настолько линейными, насколько это возможно, а при сильном округлении (например, до ближайших 2 или 5) это может привести к тому, что оно вообще не масштабируется

В идеале, поскольку электронная таблицаон уже настолько большой, и я не хочу дублировать столбцы при каждом выполнении этого, мне нужен способ выполнить это БЕЗ добавления дополнительных строк или столбцов в электронную таблицу.

Идеальный способ, по-видимому, заключается вappscript и боковая панель.Однако, если вы думаете, что можете решить эту проблему с помощью формулы, я открыт для ответа.

Для боковой панели, хотя вы должны выбрать диапазон значений для масштабирования, а затем нажать кнопку на боковой панели для запуска сценария.

Сценарий примет диапазон значений, найдитеЗначения Start и End затем дублируют эффект вышеприведенной формулы.

После чего он будет округлять каждый из результатов независимо (в идеале, используя введенное пользователем значение из текстового поля или аналогичное, т.е. 5, если я хотел округлить до ближайших 5), а затем выводить масштабированные значения между началом и концомвыбора.

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

Редактировать: это код, который я получил до сих пор, но я изо всех сил пытался выяснить, как получитькнопка для работы

Appscript

var ui = SpreadsheetApp.getUi() // Or DocumentApp or SlidesApp or FormApp.
const button = document.querySelector('input')


button.addEventListener('click', scale)

function onOpen() {
 ui.createMenu('Custom Menu')
  .addItem('Show sidebar', 'showSidebar')
  .addToUi()
}

function showAlert(obj) {
  var result = ui.alert(obj)
}


function showSidebar(){

  var html = HtmlService.createHtmlOutputFromFile('Sidebar')
    .setWidth(300)
  SpreadsheetApp.getUi().showSidebar(html)

}

function scale(){
  var minVar = document.getElementById('minVar').value
  var maxVar = document.getElementById('maxVar').value

  var selection = SpreadsheetApp.getActiveSpreadsheet().getSelection()
  var activeRange = selection.getActiveRange()
  showAlert(activeRange.data)

}

HTML

<!DOCTYPE html>
<html>

<head>
  <style>
    /* Added light green background to page*/
    body {
      background-color: darkgrey;
    }
    div {
      width: 90%;
      border-style: double;
      border-width: 2px;
      border-color: red;
      margin-top: 5px;
      /*right left set to auto centers content */
      margin-left: auto;
      margin-right: auto;
      padding: 3px;
      background-color: white;
    }
    h1 {
      text-align: center;
    }
  </style>
</head>

<body>
  <div>
  <label>Minimum Value,</label>
  <input type="text" id="minVar" value="">
  </div>

  <div>
  <label>Maximum Value,</label>
  <input type="text" id="maxVar" value="">    
  </div>

  <div>
  <input type="button" value="Scale Selected Range" id="scaleStart">
  </div>

</body>

</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...