Объединение текста и случайных чисел в скриптах Google - PullRequest
0 голосов
/ 25 сентября 2019

Я работаю в редакторе скриптов листов 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...