【问题标题】:How do I Set a formula to value in Google scripts?如何将公式设置为 Google 脚本中的值?
【发布时间】:2019-10-01 03:30:59
【问题描述】:

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

非常感谢 Tanaike 的帮助。我尝试了该脚本(我已在下面发布),但是当我尝试运行它时,该函数会运行代码,然后完全删除这些值。

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());
}

也许我做错了什么?

【问题讨论】:

  • Cannot find method getRange(number,number,number,number) 那是因为Spreadsheet 类上没有这样的方法(阅读文档)。 然后完全删除这些值。您必须在setFormula 之后添加SpreadsheetApp.flush()

标签: javascript google-apps-script static formula


【解决方案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});
}

参考资料:

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

【讨论】:

  • 太棒了!谢谢你。添加 SpreadsheetApp.flush()... 后它起作用了
  • @Anomalous 感谢您的回复。很高兴您的问题得到解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-02
  • 2019-11-18
  • 2017-08-31
  • 2012-08-15
  • 1970-01-01
相关资源
最近更新 更多