Я работаю в редакторе скриптов листов Google и пытаюсь сделать следующее (но только в скриптах Google):
=CONCATENATE("61", RANDBETWEEN(1000000000, 9999999999), "@text.com")
Вывод будет аналогичен тому, что следует в одной ячейке:
617876453299@text.com
Когда я объединяю числа и тексты в скриптах, я использую следующую формулу:
SpreadsheetApp.getActiveSheet().getRange('A1:Z10').setValue(61 + "@text.com")
, которая дает соответствующий вывод:
61@text.com
У меня есть этот код для генерации случайных чисел и заполнения их в ячейках:
var sheet = SpreadsheetApp.getActive().getSheetByName("sheet1");
var range = sheet.getRange("A1:Z1000");
for (var x = 1; x <= range.getWidth(); x++) {
for (var y = 1; y <= range.getHeight(); y++) {
var number = Math.floor(Math.random() * 8999999999) + 1000000000;
range.getCell(y, x).setValue(number);
}
}
var sheet = SpreadsheetApp.getActive().getSheetByName("sheet1");
var entries = [{
name : "Numbers: 1-9",
functionName : "numbers19"
}];
sheet.addMenu("Fill random", entries);
}
Это даетаналогичный вывод:
8767654543
Но когда я объединяю эти два кода, я постоянно получаю сообщения об ошибках.Я просто пытаюсь написать функцию внутри функции, но как я могу сделать это с двумя разными кодами?Я попробовал следующее, но это не сработало (да, я поставил функцию myFunction () {сверху и поставил соответствующую закрывающую скобку):
function myFunction() {
function randnumber() {
var sheet = SpreadsheetApp.getActive().getSheetByName("sheet1");
var range = sheet.getRange("A1:Z10");
for (var x = 1; x <= range.getWidth(); x++) {
for (var y = 1; y <= range.getHeight(); y++) {
var number = Math.floor(Math.random() * 8999999999) + 1000000000;
range.getCell(y, x).setValue(number);
}
}
var sheet = SpreadsheetApp.getActive().getSheetByName("sheet1");
var entries = [{
name : "Numbers: 1-9",
functionName : "numbers19"
}];
}
SpreadsheetApp.getActiveSheet().getRange('A1:Z10').setValue("61" +
randnumber.call(randnumber) + "@text.com")
}
В каждой ячейке было выдано следующее сообщение:
61undefined@text.com
Вероятно, я буду продолжать обновлять этот пост другими вещами, которые я пробовал, просто чтобы быть как можно более подробным с этой проблемой.
ПРИМЕЧАНИЕ 2. Спасибо, trebleCode за публикацию комментария и попытку помочь.Я ценю это!Я попытался исправить указанную вами строку:
function myFunction() {
function randnumber () {
var sheet = SpreadsheetApp.getActive().getSheetByName("sheet1");
var range = sheet.getRange("A1:Z10");
for (var x = 1; x <= range.getWidth(); x++) {
for (var y = 1; y <= range.getHeight(); y++) {
var number = Math.floor(Math.random() * 8999999999) + 1000000000;
range.getCell(y, x).setValue(number);
}
}
var sheet = SpreadsheetApp.getActive().getSheetByName("sheet1");
var entries = [{
name : "Numbers: 1-9",
functionName : "numbers19"
}];
}
SpreadsheetApp.getActiveSheet().getRange('A1:Z10').setValue("61" +
randnumber.call(randnumber()) + "@text.com")
}
Сценарий, однако, отображал одно и то же сообщение в каждой ячейке:
61undefined@text.com
ПРИМЕЧАНИЕ 3. Недавно я пытался использовать этот код:
function myFunction() {
function randnumber() {
var sheet = SpreadsheetApp.getActive().getSheetByName("sheet1");
var range = sheet.getRange("A1:Z10");
for (var x = 1; x <= range.getWidth(); x++) {
for (var y = 1; y <= range.getHeight(); y++) {
var number = Math.floor(Math.random() * 8999999999) + 1000000000;
range.getCell(y, x).setValue(number);
}
}
var sheet = SpreadsheetApp.getActive().getSheetByName("sheet1");
var entries = [{
name : "Numbers: 1-9",
functionName : "numbers19"
}];
function copyFormulasToValues() { var ss =
SpreadsheetApp.getActiveSpreadsheet();
var sourceSheet = ss.getSheetByName("Sheet1");
var destinationSheet = ss.getSheetByName("Sheet1");
var range = sourceSheet.getRange(1,1,1,1);
}
}
SpreadsheetApp.getActiveSheet().getRange('A1:Z10').setValue("61" +
randnumber + "@text.com")
}
В каждой ячейке выводится следующий вывод:
61
function randnumber() {
var sheet = SpreadsheetApp.getActive().getSheetByName("sheet1");
var range = sheet.getRange("A1:Z10");
for (var x = 1; x <= range.getWidth(); x++) {
for (var y = 1; y <= range.getHeight(); y++) {
var number = Math.floor(Math.random() * 8999999999) + 1000000000;
range.getCell(y, x).setValue(number);
}
}
var sheet = SpreadsheetApp.getActive().getSheetByName("sheet1");
var entries = [{name:"Numbers: 1-9", functionName:"numbers19"}];
function copyFormulasToValues() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sourceSheet = ss.getSheetByName("Sheet1");
var destinationSheet = ss.getSheetByName("Sheet1");
var range = sourceSheet.getRange(1, 1, 1, 1);
}
}
@text.com
Он обрабатывает вызываемую функцию какесли бы это было в кавычках.Как я могу это исправить?
Я только недавно нашел это сообщение о переполнении стека:
Использование RAND () в определяемой пользователем функции
Там написано:
"Проблема в том, что вы не можете вызвать недетерминированную функцию изнутри пользовательской функции.
Я обошел это ограничение, создав представление, вызвав эту функцию внутри представленияи использовать это представление внутри вашей функции, что-то вроде этого ...... "
Проблема в том, что он опубликовал sql, но мне нужен javascript.Есть ли способ обойти эту проблему в JavaScript?