如何在两个谷歌电子表格中使用= importrange()同步两个工作表?

时间:2013-12-08 15:25:32

标签: google-sheets

我正在使用=importrange()函数在两个不同的电子表格中同步(回显同步)两张表格(如here所述)。但是,importrange()当我在第一张纸上进行更改时,它不会同步到第二张纸。导入后,单元格保持静态,并且在第一个工作表中进行更多更改时不会更改。有办法解决吗?

2 个答案:

答案 0 :(得分:4)

我认为你不能在两张纸上使用=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函数添加更改触发器,然后当对任一文档进行任何更改时,它会将内容复制到另一个电子表格,从而保持两者同步。

显然,如果两个电子表格同时更新,您将遇到麻烦。

答案 1 :(得分:3)

这是非常有用的脚本。在您的脚本中编辑了一些更改,以便甚至可以为给定列和行同步多个工作表。代码有点慢,但工作正常。

我现在正在考虑是否有办法使用相同的方法合并多个工作表,如果有的话,它应该很棒。

   // 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());

  }
}

如果有问题,请告诉我。