连接Google脚本中的文本和随机数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了连接Google脚本中的文本和随机数相关的知识,希望对你有一定的参考价值。

我正在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

它对待我正在调用的函数就像用引号引起来。我该如何解决?

我最近在堆栈溢出处发现了这篇文章:

Use RAND() in User Defined Function

它说:

“问题是您不能从用户定义的函数内部调用非确定性函数。

我通过创建视图来解决此限制,在视图内部调用该函数并在您的函数内部使用该视图,就像这样……“

问题是他发布了sql,但是我需要javascript。有没有办法解决JavaScript中的这个问题?

答案

此功能完全可以完成我想做的事情。它用随机数和“ @text”连接“ 61”。

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")');

以上是关于连接Google脚本中的文本和随机数的主要内容,如果未能解决你的问题,请参考以下文章

Google Apps 脚本:从 .txt 文件中读取文本

如何使用随机数和列表更改 TextLabel 的文本?

JSP开发中的基础语法

;~ 小部分AutoHotkey源代码片段测试模板2019年10月9日.ahk

RecyclerView holder中的Android Google Maps动态片段

片段中的 Xamarin Android Google 地图错误