【问题标题】:Sync the first column(s) and row(s) of sheets in the same Google Sheets file同步同一 Google 表格文件中工作表的第一列和第一行
【发布时间】:2017-04-06 01:44:50
【问题描述】:

我需要同步同一个 Google 表格文件中的所有表格。 我只想同步第一行和第一列(已冻结),而其余内容不应同步。

我还想这样做,以便如果我在工作表中插入/删除一行,对所有其他同步工作表也执行相同的操作。此外,如果进行了其他修改,例如一行被冻结,所有工作表都应该这样做。

我看过这些问题的代码:

简而言之,我希望能够使用“主”表单,并在其中有几张具有不同值的表单。我应用了对主文件的更改,对工作表的更改应反映主文件中的更改。双向同步会很好,但不是严格要求。

到目前为止,我已经设法放下这个:

var masterSheetN = 2; /*2 means the master sheet is the second sheet. Sheets before the master sheet are ignored*/

function importData() {  
  /*Input sheet*/
  var fromSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var fromSheets = fromSpreadsheet.getSheets();
  var fromWorksheet = fromSheets[masterSheetN-1];
  var fromData = fromWorksheet.getDataRange();
  var fromRowsN = fromData.getNumRows()
  var fromColsN = fromData.getNumColumns()
  var fromRow1 = fromWorksheet.getRange(1, 1, 1, fromColsN);
  var fromCol1 = fromWorksheet.getRange(1, 1, fromRowsN);

  for (i=masterSheetN; i<fromSheets.length; i++) {
    /*Output sheet*/
    var toWorksheet = fromSheets[i];
    var toRow1   = toWorksheet.getRange(1, 1, 1, fromColsN);
    var toCol1   = toWorksheet.getRange(1, 1, fromRowsN);

    /*Sync row and col 1*/
    toRow1.setValues(fromRow1.getValues());
    toCol1.setValues(fromCol1.getValues());

    /*Sync format for the whole sheet*/
    var toGID = toRow1.getGridId()
    fromData.copyFormatToRange(toGID, 1, fromColsN, 1, fromRowsN)
  }
}

这成功地将所有工作表与第一行和第一列的主工作表同步,也用于格式化。但是,它很慢,特别是对于同步格式(为什么?同步第一行/列似乎快得多),并且它不同步冻结/受保护的行等内容。有没有办法从主同步所有内容何时创建新工作表?

【问题讨论】:

  • 同步是一种方式还是两种方式?有多少人可以编辑? This suggested answer 在您的第二个链接帖子中应该提供一些有关如何有效设置的指导。
  • @Rubén 嗨,我明天将编辑问题。是的,我可以使用公式,但它只复制内容。我想要的是一个主表格来填充不同的数据,在每张表中都相似。这意味着如果我更改“主工作表”中的(例如)条件格式,则应该在所有工作表中完全更改。我不知道这是否可能。
  • importrange() 只会显示数据,不会显示格式。它用于将数据从一个文件带入第二个文件。 file_key 是 URL 中的长字符串,从一个斜杠到另一个斜杠,如下所示:docs.google.com/spreadsheets/d/___file_ key_is_here___/edit#gid=0 该范围可以打开。以下将引入 A 列和 B 列中的所有项目=IMPORTRANGE(file_key, "sheet1!A1:B") 您将只能在主工作表中编辑此部分,并且您不想重新排序数据或插入行,除非您的其他工作表仅使用初始数据,否则项目不会排列。
  • @Rubén 我已经用我提出的代码编辑了我的问题,也感谢您的输入。似乎有点慢,并且它不会同步所有内容(仅格式和第一行/列)。我该如何解决这个问题?

标签: google-apps-script google-sheets


【解决方案1】:

部分回答

setValues() 和 copyFormatToRange() 使用 copyTo(Range) 代替 getValues()。

注意事项

我认为它只会复制值和格式。也许您还应该使用getDataValidation() / setDataValidation(rule) 来同步数据验证规则。

另见

【讨论】:

  • 嗨,我仍然应该对copyTo() 进行不同的调用,因为我需要复制第一行和第一列的格式、内容和所有可能的内容,但只复制其他行和列的格式。或者也许有一种我没有想到的方法?你能详细说明一下吗?
猜你喜欢
  • 2017-12-17
  • 1970-01-01
  • 2016-03-24
  • 2022-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-15
  • 2019-07-25
相关资源
最近更新 更多