Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Google脚本中设置公式值?_Javascript_Google Apps Script_Static_Formula - Fatal编程技术网

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

Javascript 如何在Google脚本中设置公式值?,javascript,google-apps-script,static,formula,Javascript,Google Apps Script,Static,Formula,我编写了一个生成随机数并将其与文本连接的代码。我使用此函数填充一系列单元格(从A1到Z10): 问题是每次我重新加载页面时,数字都会重新计算,没有静态值。我希望范围内的值变为静态,以便每次重新加载页面时,“61”和“@text”之间的数字保持不变。我试过以下两种代码,但都不起作用。第一个没有收到错误消息,只是没有将值保持静态,而第二个收到错误消息“” 第二个代码: var studentSheet = SpreadsheetApp.getActiveSpreadsheet(); var sour

我编写了一个生成随机数并将其与文本连接的代码。我使用此函数填充一系列单元格(从A1到Z10):

问题是每次我重新加载页面时,数字都会重新计算,没有静态值。我希望范围内的值变为静态,以便每次重新加载页面时,“61”和“@text”之间的数字保持不变。我试过以下两种代码,但都不起作用。第一个没有收到错误消息,只是没有将值保持静态,而第二个收到错误消息“”

第二个代码:

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());
}
也许我做错了什么?

  • 您希望删除公式并将值放入相同范围的
    A1:Z10
    单元格中
  • 这些公式已经放入电子表格
如果我的理解是正确的,那么这个答案呢

模式1: 在此模式中,使用了
copyValueStorRange

示例脚本:
  • 我认为在你的剧本中,论点可能是错误的。请按顺序设置
    表格、列、列结束、行、行结束
模式2: 在此模式中,使用了
copyTo

示例脚本:
  • 在这种情况下,请使用
参考资料:

如果我误解了您的问题,并且这不是您想要的方向,我很抱歉。

找不到方法getRange(number,number,number,number),这是因为
电子表格
类上没有此类方法(请阅读文档)。然后完全删除这些值。您必须在
setFormula
之后添加
SpreadsheetApp.flush()
!非常感谢。在添加了SpreadsheetApp.flush()之后,它起了作用。谢谢您的回复。我很高兴你的问题解决了。
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});
}
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());
}
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());
}
function copyFormulasToValues() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var range = ss.getSheetByName("Sheet1").getRange("A1:Z10");
  range.copyTo(range, {contentsOnly: true});
}