我需要将Google SpreadSheet上的工作表复制到另一个SpreadSheet文档.
我已经完成了我的研究,我找到了两种方法来做到这一点,但是两者都存在我不知道如何修复的问题.
第一种方法使用格式复制工作表,但它保留了引用的单元格,因此我在新文档(#ref)中得到引用错误.我需要一个复制格式和值(不是引用)的函数.
function copySheet() {
var source = SpreadsheetApp.getActiveSpreadsheet();
var sheet = source.getSheets()[0];
var destination = SpreadsheetApp.openById("15ucPbZrIYXZAOCYVdpK6OA0oyQT1NcsmuiJmDRfdpHQ");
sheet.copyTo(destination);
}
Run Code Online (Sandbox Code Playgroud)
第二种方法复制没有引用的值,但它只复制值,没有格式.
function copySheetValues()
{
var source = SpreadsheetApp.getActiveSheet();
var sourcename = source.getSheetName();
var sourceDataRange = source.getDataRange();
var sourceSheetValues = sourceDataRange.getValues();
var sourceRows = sourceDataRange.getNumRows();
var sourceColumns = sourceDataRange.getNumColumns();
var destination = SpreadsheetApp.openById('15ucPbZrIYXZAOCYVdpK6OA0oyQT1NcsmuiJmDRfdpHQ');
destination.insertSheet(sourcename, 0);
destination.getDataRange().offset(0, 0, sourceRows, sourceColumns).setValues(sourceSheetValues);
}
Run Code Online (Sandbox Code Playgroud)
如何编写保留格式并复制值的函数?
我想将包含 20 多张工作表的整个电子表格复制到云端硬盘中的其他位置;但是,我只想保留每个单元格中的硬值和格式,而不是公式(基本上只是拍摄值的快照)。我一直在考虑如何写这个,但我不知道什么是最好的方法。我刚刚开始学习条件语句,例如在我的谷歌表格培训中循环,任何帮助将不胜感激。谢谢!
那些绿色的单元格都是 vlookup,它们是从另一个电子表格上的数组更新的。我们的想法是获取数组中的所有正确数据,让这张表完全填写当天的正确值,然后最好将其保存为谷歌表,但只保存值,以便事后可以编辑它们(如果有)数组数据中有错误。
google-sheets google-apps-script google-sheets-api google-sheets-vlookup
我想做的是从电子表格中的特定工作表中存储信息,并在每天结束时将其复制到第二个电子表格中。第二个电子表格将针对不需要全天运行的复制信息运行复杂的数据透视和报告。
我可以设置一个时间驱动的触发器,它将在一个小时内每天运行该作业。
我正在处理以下SpreadsheetApp.getActiveSpreadsheet用于获取当前电子表格的脚本。然后获取要备份的单个工作表spreadsheet.getSheetByName。然后使用该sheet.copyTo方法将当前工作表添加到新电子表格中。我通过SpreadsheetApp.openById像这样查找 id 来获取新的电子表格:
function startBackupJob() {
var currentSpreadSheet = SpreadsheetApp.getActiveSpreadsheet()
var masterSheet = currentSpreadSheet.getSheetByName("Sheet1")
var backupSpreadSheetId = "#######################################";
var backupSpreadSheet = SpreadsheetApp.openById(backupSpreadSheetId);
// var backupSheet = backupSpreadSheet.getSheetByName("Sheet1");
// backupSpreadSheet.deleteSheet(backupSheet);
masterSheet.copyTo(backupSpreadSheet).setName("Sheet1");
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是copyTo将创建一个新的工作表而不是覆盖现有的电子表格。移动到新工作簿的目的是根据数据运行数据透视表,而不是重新连接它们以指向新工作表。
我可以删除以前的工作表为新工作表腾出空间,但这也会杀死数据透视表上的引用,因此它没有多大帮助。
有没有一种简单的方法可以将一个工作表的全部内容转移到另一个工作表?
这类似于(但不同于)以下问题:
更新
我可以通过调用getRange每个工作表然后使用getValues并setValues像这样来做到这一点:
var currentValues = masterSheet.getRange(1, 1, 50, 50).getValues()
backupSheet.getRange(1, 1, 50, 50).setValues(currentValues)
Run Code Online (Sandbox Code Playgroud)
但我担心主表与备用表的可用范围不同的边缘情况。我也不想在范围内进行硬编码,而是希望它包含整个工作表。如果我打电话,.getRange("A:E") …