【发布时间】:2017-04-06 01:44:50
【问题描述】:
我需要同步同一个 Google 表格文件中的所有表格。 我只想同步第一行和第一列(已冻结),而其余内容不应同步。
我还想这样做,以便如果我在工作表中插入/删除一行,对所有其他同步工作表也执行相同的操作。此外,如果进行了其他修改,例如一行被冻结,所有工作表都应该这样做。
我看过这些问题的代码:
- How to sync two sheets with =importrange() in two googlespreadsheet?
- Is there a way to keep two sheets synchronized?
简而言之,我希望能够使用“主”表单,并在其中有几张具有不同值的表单。我应用了对主文件的更改,对工作表的更改应反映主文件中的更改。双向同步会很好,但不是严格要求。
到目前为止,我已经设法放下这个:
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