2

需要注意的是,我对 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)。

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

4

2 回答 2

6

实际上有 2 个copyTo,一个适用于 sheet,另一个适用于 Range

根据文档(请参阅上面的链接),第二个具有可选参数以仅复制值,而第一个没有。

我猜你可以做的是使用将Range.copyTo()整个工作表范围复制到一个临时工作表(在同一个电子表格中),然后将该临时工作表复制到另一个电子表格,最后从源电子表格中删除临时工作表。

希望它足够清楚;-)

于 2013-02-13T23:12:36.853 回答
0

在脚本库中有一个名为 spreadsheetFrozenBackup 的脚本,通过它可以制作电子表格的副本。

使用了 Serge 提到的 range.copyTo。

这不是一个长脚本,所以我在这里复制它以获取信息:

// 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");
}
于 2013-02-14T01:27:58.960 回答