【发布时间】:2015-05-13 21:42:31
【问题描述】:
我想做的是电子表格中特定工作表中的仓库信息,并在每天结束时将其复制到第二个电子表格中。第二个电子表格将针对不需要全天运行的复制信息运行复杂的数据透视和报告。
我可以设置一个time-driven trigger,它将每天在一小时内运行该作业。
我正在编写以下脚本,它使用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");
}
我遇到的问题是copyTo 将创建一个新的工作表,而不是覆盖现有的电子表格。移动到新工作簿的目的是从数据中运行数据透视表,而不是重新连接它们以指向新工作表。
我可以删除以前的工作表来为新工作表腾出空间,但这也会杀死数据透视表上的引用,因此没有多大帮助。
有没有一种简单的方法可以将一个工作表的全部内容转移到另一个工作表?
这类似于(但不同于)以下问题:
- How do I script making a backup copy of a spreadsheet to an archive folder? - 但是,我不想移动整个文件,而是移动电子表格中的特定工作表。
- How can copy specifics sheet to another spreadsheet using google script & copy one spreadsheet to another spreadsheet with formatting - 但是复制会产生一个新工作表,而我需要替换现有工作表的内容
- Scripts, copy cell from one sheet to another sheet EVERYDAY at a specific time - 但是,我确实想替换整个工作表,而不仅仅是工作表中的特定单元格。
更新
我可以通过在每张纸上调用getRange 然后像这样使用getValues 和setValues 来做到这一点:
var currentValues = masterSheet.getRange(1, 1, 50, 50).getValues()
backupSheet.getRange(1, 1, 50, 50).setValues(currentValues)
但我担心主工作表与备用工作表的可用范围不同的极端情况。我也不想在该范围内硬编码,而是让它包含整个工作表。如果我打电话给.getRange("A:E"),那么这两个工作表必须具有完全相同的行数,这不太可能。
【问题讨论】:
-
我没有将数据复制到第二个电子表格文件中,而是有一个中间数据文件,第二个电子表格文件可以访问该文件。现在看来,您的第二张工作表不够动态,无法弄清楚如何引用传入的数据。我只是在这里做一个疯狂的猜测。似乎问题的一部分是第二张表能够设置对新数据的引用。如果出于任何原因需要,您可以逐个单元格地设置第二个工作表中的值。
标签: google-apps-script google-sheets