仅包含内容的电子表格副本

发布于 2025-02-14 01:08:25 字数 664 浏览 4 评论 0原文

如何仅使用内容制作Google表的副本。 我的问题是,有一个函数已经允许您在带有({contentonly:true})的表格范围内执行此操作。但是,如果有潜在的话,它行不通。 有没有办法只能制作一个值表的副本(即使有概念)? 可能是这样的:

var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var destFolder = DriveApp.getFoldersByName("Experiments").next();
  var file = DriveApp.getFileById(spreadsheet.getId()).makeCopy("Saved Copy", destFolder);
  var newSpreadsheet = SpreadsheetApp.open(file);

  for(var i = 0; i < spreadsheet.getNumSheets(); i++){
    newSpreadsheet.getSheets()[i].getDataRange().setValues(spreadsheet.getSheets()[i].getDataRange().getValues());    
  }

但是,如果有很多细胞,那不是很高效。

How to make a copy of a google sheet with content only.
My problem is that there is a function that already allows you to do this on the ranges of a sheet with ({contentonly: true}). But it doesn't work if there is an importrange.
Is there a way to make a copy of a sheet of values only (even if there is an importange)?
May be something like this :

var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var destFolder = DriveApp.getFoldersByName("Experiments").next();
  var file = DriveApp.getFileById(spreadsheet.getId()).makeCopy("Saved Copy", destFolder);
  var newSpreadsheet = SpreadsheetApp.open(file);

  for(var i = 0; i < spreadsheet.getNumSheets(); i++){
    newSpreadsheet.getSheets()[i].getDataRange().setValues(spreadsheet.getSheets()[i].getDataRange().getValues());    
  }

But it is not very efficient, if there are many cells.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

笨死的猪 2025-02-21 01:08:25

性能问题也许是通过调用太多的电子表格服务方法引起的(即drevesheet.getSheets()在循环中两次称为)。尝试以下内容:

var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var destFolder = DriveApp.getFoldersByName("Experiments").next();
var file = DriveApp.getFileById(spreadsheet.getId()).makeCopy("Saved Copy", destFolder);
var newSpreadsheet = SpreadsheetApp.open(file);
var sheets = newSpreadsheet.getSheets(); // Call SpreadsheetApp.getSheets() only once per script execution
for(var i = 0; i < sheets.length; i++){
  sheets[i].getDataRange().setValues(sheets[i].getDataRange().getValues());    
}

Maybe the performance problem is caused by calling too many Spreadsheet Service methods (i.e. Spreadsheet.getSheets() is called two times inside a loop). Try the following:

var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var destFolder = DriveApp.getFoldersByName("Experiments").next();
var file = DriveApp.getFileById(spreadsheet.getId()).makeCopy("Saved Copy", destFolder);
var newSpreadsheet = SpreadsheetApp.open(file);
var sheets = newSpreadsheet.getSheets(); // Call SpreadsheetApp.getSheets() only once per script execution
for(var i = 0; i < sheets.length; i++){
  sheets[i].getDataRange().setValues(sheets[i].getDataRange().getValues());    
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文