如何在 Google 脚本中将公式设置为值?
How do I Set a formula to value in Google scripts?
我写了一段代码,可以生成随机数并将它们与文本连接起来。我正在使用此函数填充一系列单元格(从 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});
}
错误信息:
Cannot find method getRange(number,number,number,number). (line 11, file "Code")
我只想将这些值复制并粘贴到同一个电子表格中,使它们保持不变。我怎样才能做到这一点?
注意 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());
}
也许我做错了什么?
- 您想删除公式并将值放入相同范围的
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
。
模式二:
在此模式中,使用了 copyTo
。
示例脚本:
function copyFormulasToValues() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var range = ss.getSheetByName("Sheet1").getRange("A1:Z10");
range.copyTo(range, {contentsOnly: true});
}
- 这种情况下,请使用
copyTo
of Class Range。
参考文献:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
我写了一段代码,可以生成随机数并将它们与文本连接起来。我正在使用此函数填充一系列单元格(从 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});
}
错误信息:
Cannot find method getRange(number,number,number,number). (line 11, file "Code")
我只想将这些值复制并粘贴到同一个电子表格中,使它们保持不变。我怎样才能做到这一点?
注意 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());
}
也许我做错了什么?
- 您想删除公式并将值放入相同范围的
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
。
模式二:
在此模式中,使用了 copyTo
。
示例脚本:
function copyFormulasToValues() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var range = ss.getSheetByName("Sheet1").getRange("A1:Z10");
range.copyTo(range, {contentsOnly: true});
}
- 这种情况下,请使用
copyTo
of Class Range。
参考文献:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。