作为一个警告,我对Google Apps脚本非常陌生。我感谢您提供的任何帮助。
我正在尝试将工作表的内容复制到新文档中。这段代码没有任何问题:
// Create a new Spreadsheet and copy the current sheet into it.
var newSpreadsheet = SpreadsheetApp.create("Spreadsheet to export");
var projectname = SpreadsheetApp.getActiveSpreadsheet();
sheet = originalSpreadsheet.getActiveSheet();
sheet.copyTo(newSpreadsheet);
但是,这会复制当前工作表中的公式 - 我只尝试复制值,因为公式引用原始文档中其他工作表上的数据。
我尝试这样做的方法如下:
// Create a new Spreadsheet and copy the current sheet into it.
var newSpreadsheet = SpreadsheetApp.create("Spreadsheet to export");
var projectname = SpreadsheetApp.getActiveSpreadsheet();
sheet = originalSpreadsheet.getActiveSheet();
sheet.copyTo(newSpreadsheet, {contentsOnly:true})
但是,这会产生以下错误:无法找到方法(类)copyTo($ Proxy914,object)。
我不确定我做错了什么。任何援助将不胜感激。提前谢谢!
答案 0 :(得分:6)
实际上有2个copyTo
,一个applies to sheet和另一个applies to Range
根据文档(参见上面的链接),第二个具有可选参数,仅在第一个没有时复制值。
我猜您可以使用Range.copyTo()
将整个工作表范围复制到临时工作表(在同一电子表格中),然后将该临时工作表复制到另一个电子表格,最后从中删除临时工作表源电子表格。
希望它足够清楚; - )
答案 1 :(得分:0)
在脚本库中有一个名为spreadsheetFrozenBackup的脚本,通过该脚本可以制作电子表格的副本。
使用了Serge提到的range.copy。
这不是一个很长的脚本,所以我在这里重现它以获取信息:
// Make copy of current spreadsheet with backup name.
function spreadsheetFrozenBackup() {
// Get current spreadsheet.
var ss = SpreadsheetApp.getActiveSpreadsheet();
// Name the backup spreadsheet with date.
var bssName = ss.getName() + " frozen at " + Utilities.formatDate(new Date(), "GMT", "yyyyMMdd HHmmss");
var bs = SpreadsheetApp.openById((DocsList.copy(DocsList.getFileById(ss.getId()), bssName)).getId());
// Make sure all the formulae have been evaluated...
SpreadsheetApp.flush();
// Get all the sheets in the spreadsheet
var bsl = bs.getSheets();
var pl = "";
for (var i = 0; i < bsl.length; i++) {
bsl[i].getDataRange().copyTo(bsl[i].getDataRange(), {contentsOnly:true});
pl = pl + " " + bsl[i].getName();
SpreadsheetApp.getActiveSpreadsheet().toast(pl, "Processed Sheets");
}
SpreadsheetApp.getActiveSpreadsheet().toast(bssName, "Frozen Backup");
}