【发布时间】:2016-11-23 00:34:06
【问题描述】:
我有两张使用我在此 SO 上找到的 GAS 在 Google 表格中同步的工作表,我将其设置为更改触发器 Is there a way to keep two sheets synchronized?
脚本在这里
var sourceSpreadsheetID = "ID HERE";
var sourceWorksheetName = "SHEET NAME HERE";
var destinationSpreadsheetID = "ID HERE";
var destinationWorksheetName = "SHEET NAME HERE";
function importData() {
var thisSpreadsheet = SpreadsheetApp.openById(sourceSpreadsheetID);
var thisWorksheet = thisSpreadsheet.getSheetByName(sourceWorksheetName);
var thisData = thisWorksheet.getDataRange();
var toSpreadsheet = SpreadsheetApp.openById(destinationSpreadsheetID);
var toWorksheet = toSpreadsheet.getSheetByName(destinationWorksheetName);
var toRange = toWorksheet.getRange(1, 1, thisData.getNumRows(), thisData.getNumColumns())
toRange.setValues(thisData.getValues());
}
我面临的真正问题是,如果您删除同步工作表中间的一行,getDataRange 会计算源的底部数据范围,并将其仅同步到目标工作表中的该范围,从而为任何数据创建双行超出范围的项目
示例:我的源工作表和目标工作表上有 4 行
一个
b
c
d
删除c行,源表现在
一个
b
d
目标表已同步,现在是
一个
b
d
d
我删除第 3 行,脚本在目标工作表上同步 3 行,将第 4 行保留为双行
欢迎任何关于如何克服这个问题的想法,我已经查看了命名范围,但不喜欢我不得不为行数设置一个上限,当创建 1000 行时,该范围不会更长的工作时间
【问题讨论】:
-
toWorksheet.clear()应该删除整个工作表。 -
效果很好,回答我会接受
标签: google-apps-script google-sheets