【问题标题】:Bi-directional sync when rows are deleted删除行时的双向同步
【发布时间】: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


【解决方案1】:

您只需在设置新值之前删除工作表的内容。

toWorksheet.clear()
toRange.setValues(thisData.getValues());

【讨论】:

    猜你喜欢
    • 2010-12-08
    • 2022-11-09
    • 1970-01-01
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多