Как установить формулу для значения в скриптах Google? - PullRequest
2 голосов
/ 01 октября 2019

Я написал код, который генерирует случайные числа и объединяет их с текстом. Я использую эту функцию для заполнения диапазона ячеек (от A1 до Z10):

function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var cell = sheet.getRange("A1:Z10");
cell.setFormula('=CONCATENATE("61", RANDBETWEEN(1000000000, 9999999999), "@text")');
}

Проблема в том, что каждый раз, когда я перезагружаю страницу, числа пересчитываются, статического значения нет,Я хочу, чтобы значения в моем диапазоне стали статическими, чтобы каждый раз, когда я перезагружал страницу, числа между «61» и «@text» оставались неизменными. Я пробовал следующие два кода, и ни один не работал. Первый не получил сообщение об ошибке, но просто не сохранял значения статическими, а второй получил сообщение об ошибке ""

function copyFormulasToValues() { var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sourceSheet = ss.getSheetByName("Sheet1"); 
var destinationSheet = ss.getSheetByName("Sheet1"); 
var range = sourceSheet.getRange(1,1,1,1);
range
  .copyValuesToRange(destinationSheet, 1, 1, range.getNumRows(), range.getNumColumns());
 };

Второй код:

var studentSheet = SpreadsheetApp.getActiveSpreadsheet();
var sourceSheet = SpreadsheetApp.getActiveSpreadsheet();

// copyTo rows
sourceSheet.getRange(1, 1, 10, 26).copyTo(studentSheet.getRange(1, 1, 10, 26), {contentsOnly: 
true});

SpreadsheetApp.flush(); // applies all values to the student spreadsheet
                    // and therefore all the formula cells update
// get value from calculated formula cell
studentSheet.getRange(1, 1, 10, 26).copyTo(sourceSheet.getRange(1, 1, 10, 26), {contentsOnly: 
true});
}

сообщение об ошибке:

Не удается найти метод getRange (число, номер, номер, номер). (строка 11, файл «Код»)

Я просто хочу скопировать и вставить значения в одну таблицу, чтобы они оставались статичными. Как мне этого добиться?

ПРИМЕЧАНИЕ 1.

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

function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var cell = sheet.getRange("A1:Z10");
cell.setFormula('=CONCATENATE("61", RANDBETWEEN(1000000000, 9999999999), 
"@text.com")');

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Sheet1");
var range = sheet.getRange("A1:Z10");
range.copyValuesToRange(sheet, 1, range.getNumColumns(), 1, 
range.getNumRows());
}

Возможно, я что-то делаю не так

1 Ответ

1 голос
/ 01 октября 2019
  • Вы хотите удалить формулы и поместить значения в ячейки A1:Z10, которые находятся в том же диапазоне.
  • Формулы уже помещены в электронную таблицу.

Если мое понимание верно, как насчет этого ответа?

Шаблон 1:

В этом шаблоне используется copyValuesToRange.

Пример сценария:

function copyFormulasToValues() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Sheet1");
  var range = sheet.getRange("A1:Z10");
  range.copyValuesToRange(sheet, 1, range.getNumColumns(), 1, range.getNumRows());
}
  • Я думаю, что в вашем скрипте аргументы могут быть неверными. Пожалуйста, установите sheet, column, columnEnd, row, rowEnd в порядке.

Шаблон 2:

В этом шаблоне используется copyTo.

Пример сценария:

function copyFormulasToValues() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var range = ss.getSheetByName("Sheet1").getRange("A1:Z10");
  range.copyTo(range, {contentsOnly: true});
}

Ссылки:

Если я неправильно понял ваш вопрос, и это не былонаправление, которое вы хотите, я прошу прощения.

...