2013-12-08 1 views
3

=importrange() 기능을 사용하여 두 개의 다른 스프레드 시트 (두 번째 시트는 here)에 두 개의 시트를 동기화 (반향 동기화)합니다. 그러나 importrange() 첫 번째 시트를 변경할 때 두 번째 시트와 동기화되지 않습니다. 가져온 셀은 정적 상태를 유지하고 첫 번째 워크 시트에서 더 많은 변경이 이루어지면 변경되지 않습니다. 그것을 고칠 수있는 방법이 있습니까?두 개의 googlespreadsheet에서 = importrange()를 사용하여 두 개의 시트를 동기화하는 방법은 무엇입니까?

답변

4

두 번째 시트에 기능을 추가하자마자 첫 번째 시트에 추가 한 기능을 자신의 ID로 가져 오기 때문에 두 개의 시트에 =importrange() 기능을 사용할 수 없을 것이라고 생각합니다 인수로서.

Google Apps Script를 사용할 수 있습니다. 방금 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 기능에 변화 트리거를 추가합니다.

분명히 두 스프레드 시트가 동시에 업데이트되는 경우 문제가 발생할 것입니다.

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

    } 
} 

재미있는 것이 있는지 알려주세요.

관련 문제