Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Google script - вывод в ячейку результата формулы. (http://forum.oszone.net/showthread.php?t=336603)

subuday77 08-09-2018 22:39 2830591

Google script - вывод в ячейку результата формулы.
 
Здравствуйте.
Нужно вывести в ячейку результат формулы (т.е. просто число, результат вычислений), а не саму формулу.
Скрипт
Код:

/** @OnlyCurrentDoc */

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

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

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

Iska 08-09-2018 23:34 2830599

Цитата:

Цитата subuday77
почему-то пишет в ячейку саму формулу. »

Пишет не формулу, а значение — строку текста. Не «почему-то», а в полном соответствии с написанным Вами программным кодом.

Для задания формулы — используйте методы setFormula(String)/setFormulaR1C1(String) класса Range.

subuday77 09-09-2018 00:19 2830602

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

Iska 09-09-2018 00:45 2830603

Цитата:

Цитата subuday77
Но мне-то нужно результат формулы.
Как его получить? »

Посчитать, разумеется. Если 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() для получения значения (я не знаю как там устроен пересчёт значений на рабочем листе — автоматический, ручной, по времени, по событию — так что смотрите сами, будет ли потребен в этом месте программный вызов пересчёта), и затем уже использовать метод .setValue() с полученным значением.

subuday77 09-09-2018 00:56 2830604

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 2830607

subuday77, сделайте отдельную переменную для ссылки на текущую ячейку, и работайте через неё, наподобие (не проверялось):
Код:

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

всё ж чуть быстрее будет.


Время: 01:26.

Время: 01:26.
© OSzone.net 2001-