2012-05-23 5 views
2

Google 스프레드 시트 (app-script)의 한 스프레드 시트에서 다른 스프레드 시트로 레코드를 전송하기 위해 작성한 스 니펫 코드가 있습니다.Google 문서 도구 스프레드 시트 (app-script) : 중복되지 않은 스프레드 시트간에 데이터 복사

function myFunction() { 
    // Get Spreadsheets 
    var source = SpreadsheetApp.openById("spreadsheetKeySource"); 
    var target = SpreadsheetApp.openById("spreadsheetKeyTarget"); 

    // Set Sheets 
    var source_sheet = source.getSheetByName("Sheet1"); 
    var target_sheet = target.getSheetByName("Sheet1"); 

    // Get target last row 
    var last_row = target_sheet.getLastRow(); 

    // Set Ranges 
    var source_range = source_sheet.getRange("A1:B1"); 
    var target_range = target_sheet.getRange("A"+(last_row+1)+":B"+(last_row+1)); 

    // Fetch values 
    var values = source_range.getValues(); 

    // Save to spreadsheet 
    target_range.setValues(values); 
} 

소스에서 내용을 가져 와서 루프 할 수 있는지, 대상에 존재하지 않는 레코드 만 추가 할 수 있는지 알아야합니다. 분명히이 기능은이 목적에 부적합하며 누군가 나를 올바른 방향으로 밀거나 코드 스 니펫을 예제로 제공하기를 바라고 있습니다. 난 당신이 도움을 위해 :(...

덕분에 지금까지 여기에 구글에 유용하거나 아무것도 찾을 수 없습니다

편집

나는이. 범위가 변경 완료 얻을 수 있었다 지금은했다 여러 장이있는 여러 스프레드 시트에서 데이터를 가져 와서 전자 메일 만 가져 와서 전자 메일 스프레드 시트에 추가하십시오. 작성한 코드는 다음과 같습니다.

실제로이 스크립트는 masterSpreadsheet 이것을 실행하기위한 메뉴 버튼이 추가되고 추가되었습니다. 스크립트. 우리의 더 많은 경험 사람들의

/** 
* Updates the master spreadsheet with the set source spreadsheets and pages 
**/ 
function updateMasterSpreadsheet() { 
    // var sourceSpreadsheetsArray = new Array(); 
    var sourceSpreadsheetsObject = new Object; 

    // Add Spreadsheet IDs and sheet names that need to be copied from 
    sourceSpreadsheetsObject['sourceSpreadsheet1Key'] = new Array("Sheet1"); 
    sourceSpreadsheetsObject['sourceSpreadsheet2Key'] = new Array("Sheet1"); 

    // Open master spreadsheet 
    var target = SpreadsheetApp.openById("masterSpreadsheetKey"); 

    // Open master sheet 
    var target_sheet = target.getSheetByName("Sheet1"); 

    // Loop through all source spreadsheets 
    for (var id in sourceSpreadsheetsObject) { 
    // Open source spreadsheet 
    var source = SpreadsheetApp.openById(id); 

    // Loop through and process each sheet 
    for (var sheetID in sourceSpreadsheetsObject[id]) { 
     // Open source spreadsheet sheet 
     var source_sheet = source.getSheetByName(sourceSpreadsheetsObject[id][sheetID]); 

     // Process sheet 
     _updateMasterSpreadsheet(source_sheet, target_sheet); 
    } // END - source sheets loop 

    } // END - source spreadsheets loop 

    // Add last updated 
    target_sheet.getRange("B1").setValue(new Date()); 
} 

/** 
* Performs the actual copy into the master spreadsheet 
**/ 
function _updateMasterSpreadsheet(source_sheet, target_sheet) { 
    // Get target last row 
    var last_row = target_sheet.getLastRow(); 

    // Get Source Range 
    var source_range = source_sheet.getDataRange(); 

    // Fetch Source Values 
    var source_data = source_range.getValues(); 

    //Iterate over all cells, looking for non-empty ("") cells 
    for (var row in source_data) { 

    // check if empty 
    if (source_data[row][0]!= "") { 
     // Fetch data in the sheet (do this in the loop to ensure that we check all newly added items) 
     var target_range = target_sheet.getDataRange(); 
     var target_data = target_range.getValues(); 

     // Set flags 
     var found = false; 
     var stop = false; 

     // Process loop 
     while(found == false && stop == false) { 
     // Check for duplicates 
     for (var tmpRow in target_data) { 
      if (source_data[row][0] == target_data[tmpRow][0]) { 
      found = true; 
      break; 
      } 
     } 

     // If no duplicate, add to sheet 
     if (!found) { 
      last_row++; 
      target_sheet.getRange("A"+last_row).setValue(source_data[row][0]); 
     } 

     // Prevent infinite loop 
     stop = true; 
     } 
    } 
    } 
} 

답변

0

하나는 (많은 인) 그것에 다른 포획이있을 수 있습니다,하지만 난 당신이 두 개의 라인 별 비교해야 할 것 같아요 것입니다. 두 시트에서 내용이 수동으로 변경되지 않았다고 가정하면됩니다.

무엇을 시도하고 있습니까? 당신이 사용 사례를 설명한다면, 우리는

+0

간단한 프로젝트가 더 복잡해졌지만 다행히도이 사실을 알 수 있었고 프로젝트가 완료되었습니다. 여러 스프레드 시트와 여러 시트간에 데이터를 마스터 스프레드 시트로 이동해야했습니다. 그 목적은 각 시트의 다른 위치에 저장된 전자 메일을 전자 메일 목록 인 마스터 스프레드 시트로 가져 와서 중복이 없음을 확인하는 것입니다. – Jeremy

1

Google 애플리케이션 스크립트 문서에서이 튜토리얼은 당신을 도움이 될 것입니다 ... 다른 의견을 제공 할 수 있습니다 : 명명 된 스크립트가

Tutorial: Removing Duplicate Rows in a Spreadsheet

Apps Script Gallery의 "Remove duplicates"

+0

고마워, 어젯밤에 실제로이 사실을 알았어. 운좋게도 내 중복 검사는이 예제와 매우 비슷하다. – Jeremy

관련 문제