copyTo使用{contentsOnly:true}不起作用

时间:2013-02-13 22:54:14

标签: google-apps-script google-sheets

作为一个警告,我对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)。

我不确定我做错了什么。任何援助将不胜感激。提前谢谢!

2 个答案:

答案 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");
}