В электронной таблице, которую я делаю, мне часто нужно создать диапазон значений масштабирования, используя только целые числа (целые числа).
Например, 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>