PDA

Показать полную графическую версию : [решено] Google script - вывод в ячейку результата формулы.


subuday77
08-09-2018, 22:39
Здравствуйте.
Нужно вывести в ячейку результат формулы (т.е. просто число, результат вычислений), а не саму формулу.
Скрипт
/** @OnlyCurrentDoc */

function Random() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getCurrentCell().setValue('=RANDBETWEEN(100000,999999)');
};

почему-то пишет в ячейку саму формулу.
Как записать результат вычислений?

Зарание спасибо.

Iska
08-09-2018, 23:34
почему-то пишет в ячейку саму формулу. »
Пишет не формулу, а значение — строку текста. Не «почему-то», а в полном соответствии с написанным Вами программным кодом.

Для задания формулы — используйте методы setFormula(String) (https://developers.google.com/apps-script/reference/spreadsheet/range#setFormula(String))/setFormulaR1C1(String) (https://developers.google.com/apps-script/reference/spreadsheet/range#setFormulaR1C1(String)) класса Range.

subuday77
09-09-2018, 00:19
То, что setFormyla даёт формулу - понятно.
Но мне-то нужно результат формулы.
Как его получить?

Iska
09-09-2018, 00:45
Но мне-то нужно результат формулы.
Как его получить? »
Посчитать, разумеется. Если Google Apps Script даёт доступ к функциям рабочего листа, как это позволяет Microsoft Excel:
Option Explicit

Sub Sample()
ActiveCell.Value = Application.WorksheetFunction.RandBetween(100000, 999999)
End Sub

— то использовать данный подход (позволяет или не позволяет — я совершенно не в курсе, я и о самом существовании Google Apps Script узнал только из Вашего вопроса) [Update: cудя по беглому поиску — нихрена не позволяет]. Если нет — реализовать вычисление самому программно.

В принципе, полагаю, возможен и третий способ: использовать метод . setFormula() для присвоения ячейке формулы, затем использовать метод .getValue() (https://developers.google.com/apps-script/reference/spreadsheet/range#getValue()) для получения значения (я не знаю как там устроен пересчёт значений на рабочем листе — автоматический, ручной, по времени, по событию — так что смотрите сами, будет ли потребен в этом месте программный вызов пересчёта), и затем уже использовать метод .setValue() с полученным значением.

subuday77
09-09-2018, 00:56
Ok, спасибо.
Попробую покурить.

Решил.
Вот так:
/** @OnlyCurrentDoc */

function Random() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getCurrentCell().setFormula('=RANDBETWEEN(100000,999999)');
z = spreadsheet.getCurrentCell().getValue()
spreadsheet.getCurrentCell().setValue(z)
};
Работает.

Iska
09-09-2018, 01:21
subuday77, сделайте отдельную переменную для ссылки на текущую ячейку, и работайте через неё, наподобие (не проверялось):
function Random() {
var CurrentCell = SpreadsheetApp.getActive().getCurrentCell();

CurrentCell.setFormula('=RANDBETWEEN(100000,999999)');
CurrentCell.setValue(CurrentCell.getValue())
}
всё ж чуть быстрее будет.




© OSzone.net 2001-2012