我一直试图仅将电子表格的内容(没有等式,例如= IMPORTRANGE)复制到新的电子表格中。我找到了解决方案,但是我想知道是否有更简单的方法来做到这一点?
我最终遍历原始电子表格中的每个工作表,获取每个工作表的数据范围,获取这些值,使用.copyTo将每个工作表复制到新电子表格中,删除使用新电子表格创建的“ Sheet1”,然后遍历新电子表格并将值粘贴到电子表格中的每个新工作表。
function copySpreadsheetContent() {
var ss1 = SpreadsheetApp.getActiveSpreadsheet();
var sheetNums = ss1.getNumSheets();
var ssNew = SpreadsheetApp.create('Test Spreadsheet').getId();
var ss2 = SpreadsheetApp.openById(ssNew);
var ss2Nums = ss2.getNumSheets();
var sheetVals = [];
for(var i = 0; i < sheetNums; i++){
var sheet = ss1.getSheets()[i];
sheetVals[i] = sheet.getDataRange().getValues();
var newSheet = sheet.copyTo(ss2);
newSheet.setName(sheet.getName());
}
var sheet1 = ss2.getSheetByName("Sheet1");
ss2.deleteSheet(sheet1);
for(var j = 0; j <= ss2Nums; j++){
var ss2Sheet = ss2.getSheets()[j];
ss2Sheet.getDataRange().setValues(sheetVals[j]);
}
}
据我所知,这提供了理想的结果,但是这似乎是一种真正的round回做事方式,我希望有人可以向我指出一种更有效或更直接的方法。
感谢您的帮助
答案 0 :(得分:1)
我的同事最终发现了一个更好的方法,可以通过单个for循环并将其发送到驱动器中的文件夹中
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());
}