猿问

如何在 Google 脚本中将公式设置为值?

我编写了一个生成随机数并将它们与文本连接起来的代码。我正在使用此函数来填充一系列单元格(从 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(number,number,number,number)。(第 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());

}

也许我做错了什么?


青春有我
浏览 165回答 1
1回答

白猪掌柜的

您想删除公式并将值放入A1:Z10相同范围的单元格中。公式已被放入电子表格。如果我的理解是正确的,这个答案怎么样?模式一:在这种模式中,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});}在这种情况下,请使用copyToClass Range。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答