Google Docs for Spreadsheets (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);
}
ソースからコンテンツを取得してループし、ターゲットに存在しないレコードのみを追加できるかどうかを知る必要があります。明らかに、この機能はこの目的には不十分であり、誰かが私を正しい方向に押し進めるか、例としてコード スニペットを提供してくれることを願っています。これまでのところ、Googleやここで役立つものは何も見つかりません... :(
助けてくれてありがとう
編集
これで完成できました。スコープが変更され、複数のシートを含む複数のスプレッドシートからデータを取得して、メールのみを取得し、それらをマスター メール スプレッドシートに追加する必要がありました。これが私が作成したコードです。他の人にも役立つことを願っています。
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;
}
}
}
}