【发布时间】:2015-01-01 05:51:57
【问题描述】:
我正在使用=importrange() 函数来同步(回显同步)两个不同电子表格中的两个工作表(如here 所述)。但是,importrange() 当我在第一张表中进行更改时,它不会同步到第二张表。导入后,单元格保持静态,不会随着第一个工作表中的更多更改而改变。有办法解决吗?
【问题讨论】:
标签: google-sheets
我正在使用=importrange() 函数来同步(回显同步)两个不同电子表格中的两个工作表(如here 所述)。但是,importrange() 当我在第一张表中进行更改时,它不会同步到第二张表。导入后,单元格保持静态,不会随着第一个工作表中的更多更改而改变。有办法解决吗?
【问题讨论】:
标签: google-sheets
我认为您不能在两张纸上使用 =importrange() 函数,因为只要您将该函数添加到第二张纸,它就会将您添加到第一张纸的函数与它自己一起导入ID 作为参数。
您可以使用 Google Apps 脚本,我刚刚回答了 very similar question here。但我会重复我在下面写的内容。
实现此目的的一种方法是在两个电子表格中添加一个脚本,在更改触发器上将其内容复制到另一个电子表格。例如,如果您要在两个电子表格中添加类似下面的内容,交换源和目标信息。
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());
}
只需为 importData 函数添加一个更改触发器,然后当对任一文档进行任何更改时,它会将内容复制到另一个电子表格,从而使两者保持同步。
显然,如果两个电子表格同时更新,您将遇到麻烦。
【讨论】:
这是非常有用的脚本。在您的脚本中编辑了一些更改,以便甚至可以为给定的列和行同步多个工作表。代码有点慢但效果很好。
我现在正在考虑是否有一种方法可以使用相同的方法合并多个工作表,如果可以的话,它应该很棒。
// sync multiple sheets to a source sheet ( “sheet 1”)
// change active sheet name to the designated sheet names.
function importData(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var activeSheet = ss.getActiveSheet();
var activeSheetName = ss.getActiveSheet().getSheetName();
// set the sheet to copy from sheet 1 to sheet 2. sheet 1 active sheet.
if( activeSheetName == "Daily report Counselling" )
{
var thisSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var thisWorksheet = thisSpreadsheet.getSheetByName("Sheet1");
var thisData = thisWorksheet.getRange("A5:H");
var toSpreadsheet = SpreadsheetApp.getActiveSpreadsheet()
var toWorksheet = toSpreadsheet.getSheetByName("Sheet2");
var toRange = toWorksheet.getRange("A7:H");
toRange.setValues(thisData.getValues());
}
// if sheet 1 has not the active sheet choose from sheet 2.
if( activeSheetName == "Follow Up Needed Editable" )
{
var thisSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var thisWorksheet = thisSpreadsheet.getSheetByName("Sheet2");
var thisData = thisWorksheet.getRange("A7:H");
var toSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var toWorksheet = toSpreadsheet.getSheetByName("Sheet1");
var toRange = toWorksheet.getRange("A5:H");
toRange.setValues(thisData.getValues());
}
}
如果有什么有趣的事情发生,请告诉我。
【讨论】: